为什么我的非模型支持模板在重新加载时会保持状态?

时间:2013-11-10 14:20:17

标签: ember.js

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

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', '');                                   
    }
});

1 个答案:

答案 0 :(得分:1)

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

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

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