Ember.js Can';t使用余烬模型从计算属性获取数据
我正在用Ember.js Can';t使用余烬模型从计算属性获取数据,ember.js,ember-model,Ember.js,Ember Model,我正在用ember.js和ember模型制作一个应用程序 我有一个名为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.adapt
ember.js
和ember模型制作一个应用程序
我有一个名为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'
[{
__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
}, {
...
}, {
...
}]
我想在index.hbs
中显示下载最多的内容(我使用ember-rails
)
我在IndexRoute
的setupController
hook中获取数据:
Eme.IndexRoute = Em.Route.extend
setupController: (controller, model)->
console.log Eme.Plugin.findAll().toArray()
controller.set 'plugins', Eme.Plugin.findAll()
输出:
[nextObject: function, firstObject: undefined, lastObject: undefined, contains: function, getEach: function…]
但在chrome控制台中,我执行Eme.Plugin.findAll().toArray(),结果如下:
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'
[{
__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
,但是没有显示任何内容,但是当我输出{{plugins.length}
时,我无法获得所有数据的计数
谁能帮我一把?插件看起来像一个数组,需要使用。@每个迭代器如下:
Eme.IndexController = Em.Controller.extend({
// Code
}).property('plugins.@each')
这里是关于@each的文档
关于你的数组长度,我从来没有很幸运地使用过.length,我通常使用的是.length
plugins.get('length')
希望有帮助 插件看起来像一个数组,需要使用。@每个迭代器如下:
Eme.IndexController = Em.Controller.extend({
// Code
}).property('plugins.@each')
这里是关于@each的文档
关于你的数组长度,我从来没有很幸运地使用过.length,我通常使用的是.length
plugins.get('length')
希望有帮助 我建议进行两项更改以使应用程序正常工作 弗斯特 我假设由于它被称为
plugins
(复数),因此对.findAll()
的调用返回一个插件数组
,要使其工作,您应该将控制器类型更改为阵列控制器
。然后,因为您使用的是@
aka此
在计算属性中,您应该使用胖箭头=>
来正确引用此
,因此生成的索引控制器应如下所示:
Eme.IndexController = Em.ArrayController.extend
mostDownloads:(=>
# console.log @get('content').slice(0, 3)
@get('content').slice(0, 3)
).property('content.[]')
还请注意,我们观察内容。[]
这将在内容数组更改、添加或删除项目等时触发。您也可以使用内容。@每个,但这更适合于您需要观察数组中插件
记录的属性更改时,例如,内容。@each.name
第二
现在还要更改控制器上的插件
集合的设置方式,您更应该设置控制器的内容
属性,因为这就是它的用途:
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()
将无法按您预期的方式工作,因为当您调用它时,它将返回一个承诺,而不是仍在运行的阵列(异步…)
最后一个更改是,要打印插件长度,请使用IndexRoute
的afterModel
钩子,因为现在正是解决模型
承诺的时候(异步操作已经将控制权交还给了您的应用程序)
希望对您有所帮助。我建议对应用程序进行两项更改,以使您的应用程序正常工作
弗斯特
我假设由于它被称为plugins
(复数),因此对.findAll()
的调用返回一个插件数组
,要使其工作,您应该将控制器类型更改为阵列控制器
。然后,因为您使用的是@
aka此
在计算属性中,您应该使用胖箭头=>
来正确引用此
,因此生成的索引控制器应如下所示:
Eme.IndexController = Em.ArrayController.extend
mostDownloads:(=>
# console.log @get('content').slice(0, 3)
@get('content').slice(0, 3)
).property('content.[]')
还请注意,我们观察内容。[]
这将在内容数组更改、添加或删除项目等时触发。您也可以使用内容。@每个,但这更适合于您需要观察数组中插件
记录的属性更改时,例如,内容。@each.name
第二
现在还要更改控制器上的插件
集合的设置方式,您更应该设置控制器的内容
属性,因为这就是它的用途:
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()
将无法按您预期的方式工作,因为当您调用它时,它将返回一个承诺,而不是仍在运行的阵列(异步…)
最后一个更改是,要打印插件长度,请使用IndexRoute
的afterModel
钩子,因为现在正是解决模型
承诺的时候(异步操作已经将控制权交还给了您的应用程序)
希望能有所帮助。谢谢您的提示,现在我的indexController
就这样运行了,它运行得很好Eme.indexController=Em.Controller.extend-mostDownloads:(>@get('plugins').slice(0,3)).property('plugins.@each')
谢谢您的提示,现在我的indexController
就是这样,它工作得很好Eme.indexController=Em.Controller.extend-mostDownloads:(->@get('plugins').slice(0,3)).property('plugins@each')
我不想把插件
放到内容中,因为现在IndexRoute
,我有额外的数据要显示,如标签、新闻等。我不想将插件
放入内容
,因为现在索引路由
,我有额外的数据要显示,如标签、新闻等。