什么是"强迫"模型钩子射击的最佳方法是什么?

Tor*_*ups 10 ember.js

我正在使用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);
    });
  }
});
Run Code Online (Sandbox Code Playgroud)

Kin*_*n2k 6

您可以使用setupController钩子而不是模型钩子,这是一种完全可以接受的方式来处理它.

从技术上讲,过渡是调用模型钩子并将其提供给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); 
  }
});
Run Code Online (Sandbox Code Playgroud)

来自文档:

setupController使用当前路径的控制器和model钩子提供的模型调用[ 方法] .

因此,当您使用获取的狗模型覆盖模型并将其传递给_super控制器时,控制器将使用刚刚获取的模型.

  • 你会如何通过查询参数中的动态段来处理狗?`model`钩子接受params,但setupController不接受.从模型的id中获取(强制刷新模型),如下所示:`model = App.MyModel.fetch(model.get('id')); this._super(控制器,模型);`似乎对我不起作用.我看到POST请求发生了,但视图上的字段是空白的. (4认同)