控制器和路由中的模型挂钩有什么区别?

时间:2014-08-06 11:49:57

标签: ember.js ember-data ember-cli

我尝试了一个简单的应用程序,但我很困惑,因为何时在控制器中使用模型钩子以及何时在路径中使用模型钩子。以此为例(使用EmberCLI):

模板(templates / discovery.hbs)

{{#each model}}
    <tr>
        <td>
            Q: {{ques}}
        </td>
    </tr>
    {{/each}}

所以我可以用以下两种方式定义模型

** First Way(routes / discovery.js)**

import Ember from "ember";

export default Ember.Route.extend({
    model : function(){
        return this.store.all('questions') ; 
    }
});

这与预期一样,所有类型问题的记录都会传递并显示在discovery.hbs模板中。

第二种方式(controllers / discovery.js)

import Ember from "ember";

export default Ember.ArrayController.extend({
    model : function(){
        return this.store.all('questions') ; 

    }
});

所以预计这会像以前一样(至少我预期),但是这并没有显示任何记录。那么如果我在路线或控制器中定义模型有什么区别?什么应该是首选?

1 个答案:

答案 0 :(得分:7)

正如@blessenm所说,model钩子只适用于路线。这是Route对象的主要职责之一:它检索并设置要在该路径中显示的数据。

Controller的model属性并不是一个钩子:它是一个属性。它不是只读的原因是Route应该设置和修改它。