Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 这个.get(';model';)和modelFor之间的区别_Ember.js_Ember Data - Fatal编程技术网

Ember.js 这个.get(';model';)和modelFor之间的区别

Ember.js 这个.get(';model';)和modelFor之间的区别,ember.js,ember-data,Ember.js,Ember Data,我对ember很陌生,并不真正了解这两种语法之间的区别。我应该在什么地方、在什么情况下使用一种或另一种。即,哪一个更适合用于路线,哪一个更适合控制器 this.get('model') 相对于 this.modelFor('artists/show') 例如,这个.get('model')将在控制器中的计算属性中使用 this.modelFor用于路由访问父路由的模型,例如重用或解析它。this.get('model')从当前控制器作用域获取模型 此.modelFor('artists/sh

我对ember很陌生,并不真正了解这两种语法之间的区别。我应该在什么地方、在什么情况下使用一种或另一种。即,哪一个更适合用于路线,哪一个更适合控制器

this.get('model')
相对于

this.modelFor('artists/show')
例如,这个.get('model')将在控制器中的计算属性中使用

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

this.get('model')从当前控制器作用域获取模型

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

this.get('model') //controller call
this.modelFor('someRoute') //route call
在Ember中,routes
setupController
hook默认执行这一行代码:

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

这将获取从
model
hook返回的任何内容,并使用此值设置控制器的
model
属性。在控制器中,
this.get('model')
是访问此模型的正确方法。此外,开发人员可以重写此钩子并执行不同的操作,例如将
model
设置为等于从
model
钩子(
controller.set('model',model.prop))返回的内容的子属性
。这一点值得注意,因为当您从另一个路由调用
This.modelFor
时,您不会得到由
设置控制器设置的路由的关联控制器模型。如果我记得,您会得到从
model
钩子返回的任何内容,钩子下面是路由的
currentModel
属性er正确。

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

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

什么时候成立? 在
setupController
钩子中。路由的生命周期首先解析所有与模型相关的回调(
beforeModel
model
afterModel
)。然后,它使用以下参数执行
setupController
(控制器,模型)
。这意味着它可以访问从
模型
钩子和当前
控制器
实例解析的所有内容。默认情况下,
设置控制器
控制器上设置
模型
。模型
属性:

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

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

controller.set('model', this.modelFor('myOtherRoute'));
这种行为可以被视为提高整个应用程序的一致性——它明确表示,在当前路由和控制器中,您使用的数据与
myOtherRoute
中的数据相同


它是如何工作的?它查询
myOtherRoute.model
属性,该属性存储该路由的
model
解析数据。实现相当简单-它查找您的
容器(存储路由、控制器、组件等的全局对象)对于名为
myOtherRoute
的路由,获取它的
model
属性。

准确地说,“它接受从
model
钩子返回的任何内容,并将控制器的
model
属性设置为解析该承诺的结果”。事实上,我应该注意到这个微妙之处。你说“或者解析它”,但此时,父路由模型已解析。是的,但子路由也可以解析为它。我已编辑并输入单词“to”