我正在使用ember.js
和ember-model
我有一个名为Plugin
的模型,定义如下:
Eme.Plugin = Ember.Model.extend
id: Ember.attr()
name: Ember.attr()
description: Ember.attr()
downloads: Ember.attr()
tags: Ember.attr()
Eme.Plugin.url = "/api/v1/plugins"
Eme.Plugin.adapter = Ember.RESTAdapter.create()
Eme.Plugin.collectionKey = 'plugins'
我希望在index.hbs
(我使用ember-rails
)
我在IndexRoute
的{{1}}挂钩中获取数据:
setupController
输出:
Eme.IndexRoute = Em.Route.extend
setupController: (controller, model)->
console.log Eme.Plugin.findAll().toArray()
controller.set 'plugins', Eme.Plugin.findAll()
但是在Chrome控制台中我执行[nextObject: function, firstObject: undefined, lastObject: undefined, contains: function, getEach: function…]
,我得到的结果如下:
Eme.Plugin.findAll().toArray()
在我的[{
__ember1377710636537: "ember404"
__ember1377710636537_meta: Meta
_dirtyAttributes: Array[0]
_reference: Object
_super: undefined
get _data: function() {}
isLoaded: true
isNew: false
set _data: function(value) {}
__proto__: Object
}, {
...
}, {
...
}]
中有一个计算属性:
IndexController
并且我迭代Eme.IndexController = Em.Controller.extend
mostDownloads:(->
# console.log @get('plugins').slice(0, 3)
@get('plugins').slice(0, 3)
).property('plugins')
,但没有任何内容可以显示,但是当我输出mostDownloads
时,我无法获得所有数据的计数
谁可以帮助我?
答案 0 :(得分:1)
插件看起来像一个数组,需要使用。@ each迭代器,如下所示:
Eme.IndexController = Em.Controller.extend({
// Code
}).property('plugins.@each')
以下是@each http://emberjs.com/guides/object-model/computed-properties-and-aggregate-data/
的文档关于你的数组长度,我从来没有用过.length,我通常做的长度
plugins.get('length')
希望有所帮助!
答案 1 :(得分:0)
我建议进行两项更改,让您的应用有效。
我认为,因为它被称为plugins
(复数),对.findAll()
的调用会返回plugins
数组,为此,您应该更改控制器类型成为ArrayController
。然后因为您正在使用@
aka。在您的计算属性中this
,您应该使用粗箭头=>
来正确引用this
,因此生成的IndexController
应如下所示:
Eme.IndexController = Em.ArrayController.extend
mostDownloads:(=>
# console.log @get('content').slice(0, 3)
@get('content').slice(0, 3)
).property('content.[]')
另请注意,我们观察content.[]
这会在内容数组更改,项目添加或删除等时触发。您也可以使用content.@each
但这更适合在需要观察更改时数组中plugin
记录的属性,例如content.@each.name
。
现在也改变你在控制器上设置plugins
集合的方式,你应该设置控制器的content
属性,因为它是它的用途:
Eme.IndexRoute = Em.Route.extend
setupController: (controller, model)->
# console.log Eme.Plugin.findAll().toArray()
controller.set 'content', Eme.Plugin.findAll()
这一行console.log Eme.Plugin.findAll().toArray()
将无法按预期的方式工作,因为当你调用它时它会给你一个回复而不是仍在进行的数组(异步......)。
最后一次更改,要打印插件长度,请使用afterModel
的{{1}}挂钩,因为这是解决IndexRoute
承诺的正确时间(异步操作已经对您的应用程序进行了控制。)
model
希望它有所帮助。