Ember.js 控制器中的模型挂钩和路由之间有什么区别?
我尝试了一个简单的应用程序,但我不知道什么时候在控制器中使用模型钩子,什么时候在路线中使用模型钩子。以此为例(使用EmberCLI): 模板(模板/discovery.hbs) 正如预期的那样,所有类型问题的记录都会传递并显示在discovery.hbs模板中 第二种方式(controllers/discovery.js)Ember.js 控制器中的模型挂钩和路由之间有什么区别?,ember.js,ember-data,ember-cli,Ember.js,Ember Data,Ember Cli,我尝试了一个简单的应用程序,但我不知道什么时候在控制器中使用模型钩子,什么时候在路线中使用模型钩子。以此为例(使用EmberCLI): 模板(模板/discovery.hbs) 正如预期的那样,所有类型问题的记录都会传递并显示在discovery.hbs模板中 第二种方式(controllers/discovery.js) 因此,本应以与前一个相同的方式工作(至少我希望如此),但本不显示任何记录。那个么,若我在route或controller中定义模型,那个么有什么区别呢?应该首选什么?正如@b
因此,本应以与前一个相同的方式工作(至少我希望如此),但本不显示任何记录。那个么,若我在route或controller中定义模型,那个么有什么区别呢?应该首选什么?正如@blessenm所说的,
模型
挂钩仅用于路线。这是Route对象的主要职责之一:它检索并设置要在该路由中显示的数据
控制器的
model
属性并不意味着作为挂钩:它是一个属性。它不是只读的原因是路由应该设置和修改它。模型挂钩仅用于路由。从该方法返回的内容将成为控制器“model”属性的值。AFAIK模型是控制器上的属性,而不是可以覆盖的钩子。啊,所以我猜如果尝试这样做,ember应该抛出一些错误,Like:controller上的model属性无法覆盖?代码中model
的定义是model:computed.alias('content')
。而且它应该保持可重写,因为这是您在路由中的setupController
中有时要做的事情。
{{#each model}}
<tr>
<td>
Q: {{ques}}
</td>
</tr>
{{/each}}
import Ember from "ember";
export default Ember.Route.extend({
model : function(){
return this.store.all('questions') ;
}
});
import Ember from "ember";
export default Ember.ArrayController.extend({
model : function(){
return this.store.all('questions') ;
}
});