0

我有一个意外的行为,也许你可以让我理解问题所在。我认为这是一个功能,但我无法理解。

路线:

App.LacesRoute = Ember.Route.extend
  model: -> App.Lace.find()

App.LaceRoute = Ember.Route.extend
  model: (params) ->
    App.Lace.find(params.lace_id)
  setupController: (controller, model)-> 
    controller.set('content', model)

控制器:

App.LacesController = Ember.ArrayController.extend
  contentCount: (
    -> @get("content").toArray().length
  ).property("content")

列表模板:

{{contentCount}}
{{#each controller}}
{{this}}
{{/each}}

详细模板在这里有影响

路由器:

  @resource "laces", ->
    @resource "lace", {path: ":lace_id"}

当我访问/laces计数打印 0,但所有鞋带都列在each

当我访问/laces/1计数打印正确的数量和鞋带正确列出

4

2 回答 2

2

在您之前的代码中,您将返回

@get("content").toArray().length

这不是必需的,因为该内容是 a DS.RecordArray,并且它的行为类似于数组并具有length属性。

所以这有效:

@get("content.length")

但我认为主要问题是property("content"),您必须指定对计算属性重要的值,在这种情况下,不是全部内容,而是您的属性length

所以正确的是property("content.length")

最终结果是:

App.LacesController = Ember.ArrayController.extend
  contentCount: (
    -> @get("content.length")
  ).property("content.length")
于 2013-08-20T14:44:51.333 回答
0

每当您在一个路由中覆盖 'model' 和 'setupController' 时,您需要再次在 'setupController' 中调用 super,如下所示:

App.LaceRoute = Ember.Route.extend
  model: (params) ->
    App.Lace.find(params.lace_id)
  setupController: (controller, model)->
    this._super(controller, model)
    controller.set('content', model)
于 2013-08-20T14:48:04.667 回答