【问题标题】:Can I add an additional computed property to an Ember ArrayProxy?我可以向 Ember ArrayProxy 添加额外的计算属性吗?
【发布时间】:2014-08-10 16:09:38
【问题描述】:

我正在开发一个旧版 Ember 应用程序,它的设置有点时髦,我正在尝试清理并更多地遵循惯例。一个问题是,我们不是从索引路由的model 挂钩返回一个数组,而是返回一个包含数组的对象。所以,我将model 包装在ArrayProxysetupController 中,如下所示:

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

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

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

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

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

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

谢谢!

【问题讨论】:

  • 我建议你使用'model'钩子,你为什么不使用它?,如果你使用它,你将拥有路由器api提供的所有功能,就像这个@ 987654321@,如果你检查代码中的cmets,你可以把spinner放在那里。您也可以在 ApplicationRoute 中定义它,这样,微调器将显示所有正在加载的模型。
  • 这只是一个简单的示例,其中一条数据挂在阵列上。我们正在使用 hal,因此我需要以类似方式处理大量元数据。
  • 所以,基本上,一旦加载了所有元数据,您就设置了 needsLoader ?你是这个意思吗 ?因为你可以通过模型中的 Promise 做到这一点。
  • 我在 my 模型中使用 promises 设置标志。我想通过@get('model.needsLoader') 之类的调用从控制器访问元数据。为此,我需要model_proxy 上的元数据。

标签: arrays ember.js model controller


【解决方案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

【讨论】:

  • 这不是我需要做的。这适用于计算 ArrayProxy 的content 的属性,但我需要来自原始模型的数据,而 ArrayProxy 对此一无所知。我一直在扩展 ArrayProxy 和使用 Array Mixin 之间来回切换。
  • 您介意展示一个您想要的示例吗,您可以使用 emberjs.jsbin.com 作为模板。
  • 我实际上只是想通了这一点。我最终使用了 MutableArray Mixin 并从 ArrayProxy 中提取了大量代码。完成测试后,我会发布一个更好的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-08
  • 2017-12-31
  • 1970-01-01
  • 2010-11-12
  • 1970-01-01
  • 1970-01-01
  • 2012-01-13
相关资源
最近更新 更多