我有一个意想不到的行为,也许你可以让我明白问题所在。我认为这是一个功能,但我无法理解。
路线:
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
时,打印正确的数量并正确列出鞋带
答案 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)