循环Ember.js承诺

时间:2014-09-23 00:33:53

标签: javascript ember.js ember-data handlebars.js

我试图循环我认为是Ember承诺的东西,但我似乎得到的只是一个对象,当它应该是一个数组时。

jsbin:http://emberjs.jsbin.com/qakine/1/edit

如果我只是循环模板中的项目,那么我没有问题,但我希望能够与控制器中的数组项进行交互。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:4)

这里有很多事情,让我看看我是否能记住它们:

当您在资源下有路线时,该路线的路线和控制器应采用其父级的名称。

App.Router.map(function() {
  this.resource("parent", function(){
    this.route("child");
  });
});

App.ParentChildRoute...

App.ParentChildController...

把手无法从您的控制器访问正常功能,这应该转换为计算属性。

App.ParentChildController = Ember.ObjectController.extend({
  middleNames: function(){
    ...
  }.property('middles.[]')
});

命名区分大小写

{{#each name in middlenames}}

应该是

{{#each name in middleNames}}

示例:http://emberjs.jsbin.com/cowibi/1/edit

答案 1 :(得分:0)

我创建了一个基于你的新例子,以便清楚地表达出来。你可以在这里查看:

http://emberjs.jsbin.com/hokabe/4/edit

对于Ember路由的model挂钩,如果返回值是一个promise,路由将等待已解决的promise并将解析后的值传递给控制器​​的model属性

App.Parent实例的middles属性会返回一个承诺(实际上是DS.PromiseArray实例),它将解析一个middles数组(实际上它是' sa DS.ManyArray实例)。

所以为了生孩子,你可以这样做:

App.ParentMiddlesRoute = Ember.Route.extend({
  model: function() {
    return this.modelFor('parent').get('middles');
  }
});

请注意,modelFor参数是路由名称,但不是模型名称。它意味着"从给定路线获取模型"。