视图绑定undefined - Ember.js

时间:2014-08-18 20:32:43

标签: javascript ember.js coffeescript

所以我有一个有趣的问题。我有一个侧边栏,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'。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果您使用的是最近版本的Ember,则在您的控制器完全设置完毕之后,您的观察者才会开火。要解决此问题,请将on('init')添加到观察者:

observeLoaded: (->
  console.log 'this is loaded', @get 'loaded'
).observes('loaded').on('init')