视图绑定未定义

View binding undefined - Ember.js

本文关键字:未定义 绑定 视图      更新时间:2023-09-26

所以我有一个有趣的问题。我有一个侧边栏,SortableStopView,它扩展了CollectionView其中我有一个可滚动的,可排序的'stop '列表用户可以点击进入那个stop的摘要页面。

还有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'。

任何想法吗?

如果你使用的是最新版本的Ember,你的观察者不会开火,直到你的控制器完全设置好。要解决这个问题,将on('init')添加到观察者:

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