ember.js:控制器的意外行为

时间:2013-08-20 14:15:20

标签: ember.js

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

路线:

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时,打印正确的数量并正确列出鞋带

2 个答案:

答案 0 :(得分:2)

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

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

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

这样可行:

@get("content.length")

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

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

最终结果是:

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

答案 1 :(得分: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)