我可以向Ember ArrayProxy添加额外的计算属性吗?

时间:2014-06-20 00:10:03

标签: arrays ember.js model controller

我正在开发一个传统的Ember应用程序,它有一些时髦的设置,我正在尝试清理并遵循惯例。一个问题是,我们返回一个包含数组的对象,而不是从索引路由的model钩子返回一个数组。所以,我将model包裹在ArrayProxy setupController中,如下所示:

setupController: (controller, model) ->
  model_proxy = Ember.ArrayProxy.create({content: model.get('item')})
  controller.set('content', model_proxy)

这实际上有效(即{AJ}承诺解析且content加载数据时model.item更新。问题是,我在控制器中还需要model上的另一个属性。 model具有needsLoader属性,该属性初始化为true,然后在promise解析时设置为false。我们正在使用它来向用户显示一个微调器,同时从服务器获取数据。

所以,我的问题是:我有什么方法可以代理needsLoader中的ArrayProxy吗?

我尝试过的一个解决方案是以非标准方式将原始model挂钩到控制器上:

setupController: (controller, model) ->
  ....
  controller.set('_model', model)
  ....

这使我可以通过调用needsLoader从控制器访问@get('_model.needsLoader')。它可以工作,但我想在路由器中完成所有脏工作,这样我的控制器中就可以像往常一样调用model

谢谢!

1 个答案:

答案 0 :(得分:1)

不确定是否有意义,但您可以创建自己的类型:

var myArrayProxy = Ember.ArrayProxy.extend({
  countPlusTen: function(){
    return this.get('content.length') + 10;
  }.property('content.length')
});


var instance = myArrayProxy.create({
  content: [1,2,3]
});

console.log(instance.get('countPlusTen'));

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