【发布时间】:2014-08-10 16:09:38
【问题描述】:
我正在开发一个旧版 Ember 应用程序,它的设置有点时髦,我正在尝试清理并更多地遵循惯例。一个问题是,我们不是从索引路由的model 挂钩返回一个数组,而是返回一个包含数组的对象。所以,我将model 包装在ArrayProxy 中setupController 中,如下所示:
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