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

Arrays 我可以向Ember ArrayProxy添加额外的计算属性吗?,arrays,ember.js,model,controller,Arrays,Ember.js,Model,Controller,我正在开发一个遗留的余烬应用程序,它有一点时髦的设置,我正在尝试清理东西,并更多地遵循惯例。一个问题是,我们不是从索引路由的modelhook返回数组,而是返回一个包含数组的对象。因此,我在setupController中将模型包装在ArrayProxy中,如下所示: setupController: (controller, model) -> model_proxy = Ember.ArrayProxy.create({content: model.get('item')})

我正在开发一个遗留的余烬应用程序,它有一点时髦的设置,我正在尝试清理东西,并更多地遵循惯例。一个问题是,我们不是从索引路由的
model
hook返回数组,而是返回一个包含数组的对象。因此,我在
setupController
中将
模型
包装在
ArrayProxy
中,如下所示:

setupController: (controller, model) ->
  model_proxy = Ember.ArrayProxy.create({content: model.get('item')})
  controller.set('content', model_proxy)
这实际上是可行的(即当AJAX承诺解析并且
model.item
加载数据时,
内容
会更新)。问题是,
model
上还有一个属性,我的控制器中也需要这个属性
model
有一个
needsLoader
属性,该属性初始化为true,然后在承诺解析时设置为false。我们使用它在从服务器获取数据时向用户显示微调器

因此,我的问题是:是否有任何方法可以在
ArrayProxy
中代理
needsLoader

我尝试过的一种解决方案是以非标准方式将原始
模型
连接到控制器上:

setupController: (controller, model) ->
  ....
  controller.set('_model', model)
  ....
这允许我通过调用
@get(“\u model.needsLoader”)
从控制器访问
needsLoader
。它可以工作,但我想在路由器中做所有的脏活,这样我的控制器中就有了一个干净的接口,可以像往常一样调用
model


谢谢

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

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'));

示例:

我建议您使用“model”钩子,为什么不使用它呢?如果您使用它,您将拥有路由器api提供的所有功能,如此,如果您检查代码中的注释,您可以将微调器放在那里。您还可以在ApplicationRoute中定义它,这样,微调器将显示所有正在加载的模型。这只是一个挂起数组的一段数据的简单示例。我们正在使用hal,所以我需要以类似的方式处理大量元数据。所以,基本上,在加载所有元数据后,您正在设置needsLoader?这就是你的意思吗?因为你可以通过模型中的承诺来实现这一点。我正在用模型中的承诺来设置标志。我想通过调用
@get('model.needsLoader')
从控制器访问元数据。为此,我需要
model\u proxy
上的元数据。这不是我需要做的。这可以用于计算ArrayProxy的
内容的属性,但我需要ArrayProxy不知道的原始模型的数据。我一直在扩展ArrayProxy和使用ArrayMixin之间来回奔波。您是否介意展示一个您想要的示例,您可以使用emberjs.jsbin.com作为模板。实际上,我刚刚解决了这个问题。我最终使用了可变数组Mixin,并从ArrayProxy中提取了大量代码。一旦我完成测试,我会发布一个更好的答案。