Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js Can';t使用余烬模型从计算属性获取数据_Ember.js_Ember Model - Fatal编程技术网

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
,我有额外的数据要显示,如标签、新闻等。我不想将
插件
放入
内容
,因为现在
索引路由
,我有额外的数据要显示,如标签、新闻等。