我正在使用ember.js 1.2,其中一条路线有一个非常动态的模型。当我第一次跳到路线或者当我粘贴路线的模型钩子的URL时,然后设置控制器触发,一切都按预期工作。
当我稍后进入路径(但不是直接来自url)时会出现问题 - 这只会触及setupController挂钩(并且模型方法永远不会触发)。但从技术上讲,改变的是url(和父模型)。使用此模型,它主要是从父模型定义的(使用该父模型在运行时获取一组新的动态配置)。
那么每次加载这条特定的路由时,如何强制setupController重新执行模型钩子? (好像模型方法每次都在开火)。
或者......我应该在setupController中获取这个动态模型,并通过让它返回一个空对象来保持模型钩子无逻辑吗?
更新
App.ChildIndexRoute = Ember.Route.extend(App.ModelMixin, {
setupController: function(controller, model) {
this._super(controller, model);
var parent = this.modelFor('parent');
return this.getForParent(parent).then(function(things) {
controller.set('model', things);
});
}
});
答案 0 :(得分:6)
您可以使用setupController
hook代替模型钩子,这是一种完全可以接受的方式来处理它。
从技术上讲,转换是调用模型钩子并将其提供给setupController。
链条中的哪个位置没有触发模型钩子?这是一个带有一些嵌套资源的简单应用程序。
http://emberjs.jsbin.com/AtebAsOS/6/edit
此示例中的代码的关键位于DogsRoute:
App.DogsRoute = Em.Route.extend({
setupController: function(controller, model){
model = Em.get(this.modelFor('cow'), 'dogs');
this._super(controller, model);
}
});
来自文档:
使用当前路由的控制器和
setupController
挂钩提供的模型调用[{1}}]方法。
因此,当您使用获取的狗模型覆盖模型并将其传递给model
时,控制器将使用刚刚获取的模型。