2013-11-10 4 views
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», которое я ввел ранее. Я надеялся, что это не будет сохраняться в любом состоянии, так как каждый раз, когда я «добавляю» новую модель, она не должна знать о каких-либо предыдущих данных модели.

Как я могу добиться этого с угольком 1.1.2+

Update

Подход, который я взял был сбросить каждый элемент в методе 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

Быстрый и грязный ответ: вы хотите использовать модель на маршруте. Если вы этого не сделали, вам придется вручную вычеркнуть значения на контроллере. Ember строит одномодовые контроллеры. Это, как правило, супер удобно и очень хорошо.

Контроллеры Singleton сохраняют состояние. Лучший способ сохранить их без гражданства - это заставить их поддерживать модель (вернуть пустой объект из крючка модели и не иметь значений, определенных на контроллере). Возвращая что-то из крючка модели, он будет использовать ObjectController (или вам нужно будет обновить свой код, чтобы использовать ObjectController на вашем контроллере). Затем все значения будут проксированы к модели вместо сохранения на контроллере.

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

+0

Какая-то часть меня надеялась, что ты бы не сказал, что, но я понимаю, плюсы контроллеров состояние полноты. Спасибо за быстрый ответ –

+0

Мой крюк маршрутной модели возвращает родительский идентификатор, поэтому я не могу просто вернуть {}, поскольку init запускается только при создании контроллера (и это происходит только один раз) - как я могу сбросить поля в вопрос вручную? –

+0

Я не уверен, что я полностью понимаю ваш рабочий процесс (не стесняйтесь модифицировать jsbin, чтобы показать проблему), но вы можете сбросить их во время крюка afterModel/setupController маршрута (они находятся в начале перехода. – Kingpin2k

Смежные вопросы