Ember ArrayController无法按itemController中定义的属性进行排序

时间:2013-11-19 21:17:07

标签: ember.js ember-data

我想通过itemController中定义/计算的属性对ArrayController进行排序。见JSBin。如果按firstName排序(在模型中定义),它可以正常工作,但如果按lastName排序(在itemController中定义),它就不起作用。确保使用sortAscending:true或false。知道如何使这项工作吗?

这是另一个更简单的JSBin,表现出相同的行为(第一个JSBin更接近我的实际代码)。

1 个答案:

答案 0 :(得分:1)

可排序的mixin应用于内容,而不是内容的控制器。

代码:https://github.com/emberjs/ember.js/blob/v1.1.2/packages/ember-runtime/lib/mixins/sortable.js#L72

您可能希望将您在控制器上添加的任何逻辑添加到模型中。

您之前提到的特定用例最适合该模型。真的是你在控制器和模型上划线的地方是多余的。如果属性需要跨控制器持久存在,则应将其添加到模型中,尤其是在控制器不是单例控制器的情况下。如果它是一个单独的控制器并且模型永远不会在它下面改变,那么该属性可以存在于控制器上。

重要的是要注意,在模型上定义属性并不意味着您必须从服务器获取它,也不要将其保存到服务器。

App.User = DS.Model.extend({
  name : DS.attr(),  // this will be saved to the server
  something: 31      // this isn't a DS attr, it isn't going anywhere
});

作为一个说明,我早些时候撒谎了。

您可以与父控制器通信您的子控制器。

从父控制器内部,您可以使用objectAt访问子控制器并迭代父控制器。

在此示例中,这是父控制器

  console.log(this.objectAt(0));

  this.forEach(function(itemController){
    console.log(itemController);
  });

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