Question

When a create a view from an object, it seems that when I change a property in the object, the view's property also changes. If I change the property in the view, the change is not reflected in the object. I thought two-way bindings were the default behavior. Am I missing something?

WidgetClass = Ember.Object.extend
  address: 'widget address'
  create_view: ->
    # console.log this.name
    view = Ember.View.create
      someobj: this
      addressBinding: 'someobj.address'
      template: Ember.Handlebars.compile '{{address}}'

    return view

TextWidget = WidgetClass.create()

view = TextWidget.create_view()

view.append()

view.set 'address', 'new new address'
console.log (view.get 'address')
console.log (TextWidget.get 'address') # I am expecting this output to be 'new new address'

http://jsfiddle.net/rkitamura/2zsUX/

Était-ce utile?

La solution

When applying bindings and then testing them immediately, you need to force the Ember run loop to catch up. Try adding Ember.run.sync() before view.set 'address', 'new new address'. Your setTimeout() call should no longer be needed.

Autres conseils

It is important to use setPath in this case. Two-way binding works perfectly.

The following code works.

view.setPath 'someobj.address', 'new new address'
console.log (TextWidget.get 'address')  # this outputs 'new new address' correctly
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top