Sha256: 7915d4f39eb93b64521e57ba6042a3a3b26386c59f581d5f6527c84c1c99cf53

Contents?: true

Size: 1.78 KB

Versions: 4

Compression:

Stored size: 1.78 KB

Contents

stateModel = Luca.register("Luca.ViewState").extends("Luca.Model")

Luca.concerns.StateModel =
  __onModelChange: (args...)->
    statefulView = @
    state = statefulView.state

    @trigger.call(statefulView, "state:change", args... )

    for changed, value of state.changedAttributes()
      @trigger.call statefulView, "state:change:#{ changed }", state, value, state.previous(changed)

  __initializer: ()->
    @stateful = @stateAttributes if @stateAttributes?

    return unless @stateful?
    
    statefulView = @

    if _.isObject(@stateful) and not @defaultState?
      @defaultState = @stateful 

    @state ||= new Luca.ViewState(@defaultState || {})

    view = @

    @get = ()->
      view.state.get.apply(view.state, arguments)

    @set = ()->
      view.state.set.apply(view.state, arguments)

    for key, value of @state.toJSON()
      hook = "on" + _.str.capitalize(key) + "Change"
      getter = "get" + _.str.capitalize(key) 
      unless _.isFunction(@[getter])
        1
      if _.isFunction(@[hook])
        1

    Luca.concerns.StateModel.__setupModelBindings.call(@, "on")

  __setupModelBindings: (direction="on")->
    statefulView = @
    for attribute, handler of @stateChangeEvents
      fn = if _.isString(handler) then statefulView[handler] else handler 
      
      if attribute is "*"
        statefulView[direction]("state:change", fn, statefulView)
      else
        statefulView[direction]("state:change:#{ attribute }", fn, statefulView)

    # Any time there is a model change event on the internal state machine
    # we will trigger a general state:change event on the component as well
    # as individual state:change:attribute events
    state = statefulView.state 
    statefulView.state[direction]("change", Luca.concerns.StateModel.__onModelChange, statefulView)

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
luca-0.9.91 app/assets/javascripts/luca/concerns/state_model.coffee
luca-0.9.9 app/assets/javascripts/luca/concerns/state_model.coffee
luca-0.9.899 app/assets/javascripts/luca/concerns/state_model.coffee
luca-0.9.89 app/assets/javascripts/luca/concerns/state_model.coffee