this.get('model')和modelFor之间的区别

时间:2015-05-22 17:04:20

标签: ember.js ember-data

我对ember很新,并没有真正区分两种语法。我应该在哪种情况下使用哪种情况。即哪一个更适合在路由中使用,哪一个适用于控制器。

this.get('model')

相反
this.modelFor('artists/show')

4 个答案:

答案 0 :(得分:6)

this.get('model') //controller call
this.modelFor('someRoute') //route call

在Ember中,默认情况下路由setupController挂钩执行以下一行代码:

setupController: function(controller, model){
   controller.set('model', model);
}

这将从model挂钩返回任何内容,并使用此值设置控制器的model属性。在控制器内,this.get('model')是访问此模型的正确方法。此外,开发人员可以覆盖此挂钩并执行不同的操作,例如将model设置为等于从model挂钩(controller.set('model', model.prop)返回的内容的某些子属性。这值得注意,因为当你从另一条路线拨打this.modelFor时,你不会得到由setupController设置的路由相关控制器的模型。你得到{{1}返回的任何内容} hook,如果我没记错的话,它是封面下的model属性。

答案 1 :(得分:4)

this.get(' model')从当前控制器范围中提取模型。

this.modelFor(' artists / show')获取将在指定路线范围内的模型。

答案 2 :(得分:3)

this.get(' model')将在计算属性中用于控制器中,比如说。

this.modelFor用于访问父路由模型的路由,例如重用或解析它。

答案 3 :(得分:3)

这两个是在不同的ember对象上定义的 - 控制器上的model属性和路径上的modelFor 方法

首先,model属性,并将其作为this.get('model')执行,只获取已在控制器中的model属性上设置的对象。这意味着它获得了在路由中setupController挂钩期间设置的任何内容。您无法使用此语句从API获取任何数据。此外,它只允许您获取在当前控制器(this范围)上设置的对象。

何时设置?

setupController钩子里。路线的生命周期首先解决所有与模型相关的回调(beforeModelmodelafterModel)。之后,它使用以下参数执行setupController(controller, model)。这意味着它可以访问从model挂钩和当前controller实例解析的所有内容。默认情况下,setupController会在model属性上设置controller.model

controller.set('model', model);

您可以使用自定义代码覆盖该代码,例如在myModel属性上设置您的模型 - 这取决于您。但是,如果您想在控制器代码中获取模型,则必须始终查询设置模型的属性。

#modelFor如何运作?

modelFor在路由实例上定义,允许您从应用程序中的任何路由获取model挂钩结果。您可以在setupController挂钩中使用它,如下所示:

controller.set('model', this.modelFor('myOtherRoute'));

此行为可被视为提高整个应用程序的一致性 - 它明确表示在当前路由和控制器中使用与myOtherRoute中相同的数据。

它是如何工作的?它查询myOtherRoute.model属性,该属性存储该路由的model已解析数据。实现非常简单 - 它会查找名为container的路由的myOtherRoute(存储路由,控制器,组件等的全局对象)并获取model属性。< / p>