所以我有一个有趣的问题。我有一个侧边栏,SortableStopView,它扩展了CollectionView,我有一个可滚动的,可排序的“停止”列表,用户可以点击它来到该停止的摘要页面。
还有SortableStopsController,一个用于按display_order
对停靠点进行排序的ArrayController。事后来看,这个ArrayController不是必需的,但我不认为这是我的问题。
App.SortableStopController = Ember.ArrayController.extend
sortProperties: ['display_order']
loaded: false
stopsMoved: false
observeStuff: (->
console.log 'stops', @get 'content'
console.log 'loaded', @get 'loaded'
).observes 'loaded', 'content'
现在,在StopsIndexRoute中,我有configController
。 (我的所有路线都会延伸App.AuthenticatedRoute
,它会覆盖setupController
,会运行一些自定义代码,然后调用configController
。这就是我在整个应用中使用的而不是setupController
。)我将SortableStopController的内容设置为我通过Ember Data获取的停止并告诉控制器该数据已被加载。
App.StopsIndexRoute = App.AuthenticatedRoute.extend
configController: (controller, model) ->
self = this
sortableStopCtlr = @controllerFor 'sortableStop'
@store.find('stop', route_id: model.get("route_id")).then (stops) ->
sortableStopCtlr.set 'model', stops
sortableStopCtlr.set 'loaded', true
这一切都被
插入stops.hbs
(它需要在所有停靠路线上)
{{view "sortableStop" content=controllers.sortableStop.arrangedContent loadedBinding="controllers.sortableStop.loaded" movedBinding="controllers.sortableStop.stopsMoved"}}
问题是以下观察者注销this is loaded undefined
。如果我退出content
,也会如此。
App.SortableStopView = Ember.CollectionView.extend
observeLoaded: (->
console.log 'this is loaded', @get 'loaded'
).observes 'loaded'
这里没有显示,但StopsController,StopsIndexController和StopsEditController在needs
数组中都有'sortableStop'。
有什么想法吗?
答案 0 :(得分:0)
如果您使用的是最近版本的Ember,则在您的控制器完全设置完毕之后,您的观察者才会开火。要解决此问题,请将on('init')
添加到观察者:
observeLoaded: (->
console.log 'this is loaded', @get 'loaded'
).observes('loaded').on('init')