0

我有一个加载所有模型的路由,以及一个允许用户添加新模型的嵌套路由。

App.Router.map(function() {
  this.resource("foo", {path: "/foo"}, function() {
    this.route("add", {path: "/add"});
  });
});

我的添加模板看起来像这样(非常基本)

{{input value=wat}}

这是我的索引模板中的 linkTo

{{#linkTo 'foo.add'}}Add A New Model{{/linkTo}}

当我单击添加按钮时,我只需使用 $.ajax 创建模型并转换回列表路由。一切都很好,直到我再次单击“添加”链接。

当添加路线第二次从上方加载模板时,它仍然显示我之前输入的“wat”值。我希望它不会保留任何状态,因为每次我“添加”一个新模型时它应该不知道任何以前的模型数据。

如何使用 ember 1.1.2+ 实现这一目标

更新

我采用的方法是重置路由的 setupController 方法中的每个元素(因为每次加载控制器时都会调用它)。

App.FooAddRoute = Ember.Route.extend({                           
    model: function(params) {               
        var parentId = 1;                               
        return Ember.Object.create({'bar': parentId});                     
    },                                                                    
    setupController: function(controller, model) {                        
        this._super(controller, model);                                   
        controller.set('bazz', '');                                   
    }
});
4

1 回答 1

1

快速而肮脏的答案是您想在路线上使用模型。如果没有,则必须手动清除控制器上的值。Ember 构建单例控制器。这通常非常方便且非常高效。

单例控制器保持状态。保持它们无状态的最好方法是让它们由模型支持(从模型钩子返回一个空对象,并且没有在控制器上定义的值)。通过从模型挂钩返回一些内容,它将使用 ObjectController(或者您需要更新代码以在控制器上使用 ObjectController)。然后所有值将被代理到模型而不是存储在控制器上。

http://emberjs.jsbin.com/OPaguRU/1/edit

于 2013-11-10T18:18:57.473 回答