怎么可能,绑定有延迟?
App.SomeRoute = Ember.Route.extend
actions:
someAction: ->
console.log @controllerFor('some').get('foo')
Ember.run.later (=> console.log @controllerFor('some').get('foo')), 10
App.SomeController = Ember.ObjectController.extend()
App.OtherController = Ember.ObjectController.extend
needs: ['some']
fooBinding: 'controllers.some.foo'
action:
changeIt: ->
@set('foo', 'bar')
@send('someAction')
如果引发了动作changeIt
(例如从视图中),控制台输出将为undefined
,但稍微延迟后它将为bar
。
我做错了什么?
答案 0 :(得分:2)
这是预期的行为,当您更改绑定属性时,不会立即执行同步,只是计划并稍后调用。
这很重要,因为如果我们有fooBinding: 'controllers.some.foo'
。无论foo
被更改多少次,controllers.some.foo
属性只需要使用最终结果更新一次。有了这个,我们就可以避免触发未经观察的观察者,并节省处理。
您可以使用Ember.run.sync()
强制计划的同步队列使用以下代码进行刷新:
App.SomeRoute = Ember.Route.extend
actions:
someAction: ->
Ember.run.sync()
# now you can see the updated value
console.log @controllerFor('some').get('foo')
App.SomeController = Ember.ObjectController.extend()
App.OtherController = Ember.ObjectController.extend
needs: ['some']
fooBinding: 'controllers.some.foo'
action:
changeIt: ->
@set('foo', 'bar')
@send('someAction')
请记住,这只是一个示例,因为您可以看到更新后的值。不建议使用Ember.run.sync()
。