EmberJS排序/过滤由ObjectController修饰的ArrayController

时间:2014-10-01 18:35:19

标签: ember.js

我正在努力限制由ArrayController表示的数据集,该数据集还依赖于ObjectController作为动作和计算属性的装饰器。当我定义一个计算的'结果'财产,让它返回内容'或者' arrangeContent',似乎我的ObjectController(itemController)完全被绕过,并没有引用'货物'模型包括在内。

路线:

App.ShipmentsManifestsRoute = Ember.Route.extend({
  model: function() {
    return this.store.find('manifest');
  }
})

型号:

App.Shipment = DS.Model.extend({
  from: DS.attr("string"),
  tracking: DS.attr("string"),
  manifest: DS.hasMany("manifest", { async: true   }),
  received: DS.attr("number", { 
    defaultValue: function() {
      return moment(Firebase.ServerValue.TIMESTAMP);
    }
  })
});

App.Manifest = DS.Model.extend({
  upc:       DS.attr("string"),
  quantity:  DS.attr("number", { defaultValue: 1        }),
  condition: DS.attr("string", { defaultValue: 'New'    }),
  status:    DS.attr("string", { defaultValue: 'Accept' }),
  title:     DS.attr("string"),
  notes:     DS.attr("string"),
  shipment:  DS.belongsTo("shipment", { async: true }),
});

控制器:

App.ManifestController = Ember.ObjectController.extend({
  actions: {
    save: function() {
      this.get('model').save();
    }
  },

  receivedDate: function() {
    return moment(this.get('shipment.received')).format('YYYY-MM-DD');
  }.property('shipment.received')
})

App.ShipmentsManifestsController = Ember.ArrayController.extend({
  itemController: 'manifest',
  sortProperties: ['shipment.received'],
  sortAscending: false,  

  results: function() {
    return this.get('arrangedContent').slice(0, 10);  
  }.property('arrangedContent.[]')  
})

另外值得注意的是,当使用'结果时,我的itemController操作似乎基本上不存在。渲染我的数据集。我有一些内联编辑功能,可以调用' save'对itemController的操作,Ember抛出了一个“保存”的错误。不存在。

如果我迭代{{#each controller}}而不是{{#each results}},这一切当然都有效。

我猜最终问题在于内容'不会返回控制器上可用的所有数据元素/属性/计算属性。

这种限制是否有最佳实践方法?

更新:

问题肯定与引用arrangeContent时缺少的itemController有关。当直接遍历ArrayController时,我的View正在引用App.ManifestController作为控制器。但是,当遍历arrangeContent时,我的View将引用App.ShipmentsManifestsController作为控制器。仍然不确定为什么会这样。

更新2:

基于此,看起来我的问题与Setting itemController on a filtered subset of an ArrayController's model

重复

提供了涉及额外把手参数的变通方法,我将尝试。但是仍然喜欢关于这是预期行为还是错误的任何输入。

0 个答案:

没有答案