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中提取了大量代码。一旦我完成测试,我会发布一个更好的答案。