使用ember尝试从路径模型钩子中设置控制器中的值会产生错误

时间:2016-10-28 16:43:43

标签: javascript ember.js

我为这条路线设置了一个控制器,控制器中的其他所有功能似乎都很好。我试图将元值从路由传递给控制器​​中的变量,我得到一个控制台错误:

Error: Property set failed: object in path "controller" could not be found or was destroyed.

这是我路线中的相关摘录:

 model(params){                                                                                                                                                                                                          
   let someVariable = this.store.query('somePath', params);                                                                                                                                       
   someVariable.then((results) => {                                                                                                                                                                                     
       this.set('controller.totalPages', results.get('meta.page_count'))                                                                                                                                                 
   });                                                                                                                                                                                                                   
   return someVariable;                                                                                                                                                                                                 
 }

在控制台错误中有问题的行是这一行

this.set('controller.totalPages', results.get('meta.page_count'));

另一个有趣的片段是,当我在数据表中排序并再次提出模型请求时,我的' totalPages'变量最终按预期显示(使用元值),它在我看不到的初始页面加载上。

1 个答案:

答案 0 :(得分:2)

执行model挂钩时,尚未设置controller。检查路由生命周期 - 控制器在model之后可用,afterModel等不仅返回,而且它们返回的承诺已经解决。您应该将逻辑移到setupController

model(params) {
    return this.store.query('somePath', params);
},

setupController(controller, model) {
    controller.set('totalPages', model.get('meta.page_count'));
    this._super(...arguments);
}

或者,您可以跳过setupController并在控制器中添加别名:

totalPages: Ember.computed.alias('model.meta.page_count')