Тот же шаблон Ember.JS для отображения/редактирования и создания

Я пишу приложение CRUD, используя Ember.JS:

  • Отображается список «действий»;
  • Пользователь может щелкнуть одно действие, чтобы отобразить его, или щелкнуть кнопку, чтобы создать новое действие.

Я хотел бы использовать один и тот же шаблон для отображения/редактирования существующего объекта модели и создания нового.

Вот код маршрутизатора, который я использую.

App = Ember.Application.create();

App.Router.map(function() {
    this.resource('actions', {path: "/actions"}, function() {
        this.resource('action', {path: '/:action_id'});
        this.route('new', {path: "/new"});
    });
});

App.IndexRoute = Ember.Route.extend({
    redirect: function() {
        this.transitionTo('actions');
    }   
});

App.ActionsIndexRoute = Ember.Route.extend({
    model: function () {
        return App.Action.find();
    }
});

App.ActionRoute = Ember.Route.extend({
    events: {
        submitSave: function () {
            this.get("store").commit();
        }
    }
});

App.ActionsNewRoute = Ember.Route.extend({
    renderTemplate: function () {
        this.render('action');
    },

    model: function() {
        var action = this.get('store').createRecord(App.Action);       
        return action;
     },

    events: {
        submitSave: function () {
            this.get("store").commit();
        }
    }
});

Проблема в том, что когда я сначала отображаю действие, а затем возвращаюсь, чтобы создать новое, похоже, что шаблон не использует вновь созданную запись, а вместо этого использует ту, которая отображалась ранее.

Моя интерпретация заключается в том, что контроллер и шаблон не синхронизированы. Как бы Вы это сделали? Может быть, есть более простой способ добиться этого?

Вот JSBin с кодом: http://jsbin.com/owiwak/10/edit


person Bernard Notarianni    schedule 04.03.2013    source источник


Ответы (1)


Говоря this.render('action'), вы не только говорите ему использовать шаблон action, но и ActionController, хотя на самом деле вам нужен шаблон action, но с ActionNewController.

Вам нужно переопределить это:

this.render('action', {
  controller: 'actions.new'
});

Обновлена ​​корзина JS.

person Teddy Zeenny    schedule 04.03.2013
comment
Теперь я понимаю, что функция model из ActionsNewRoute на самом деле внедряет свой объект модели в ActionsNewController. Я мог записать, что эта функция была вызвана, но не мог видеть созданный объект. Вы помогли мне лучше понять эту модель роутера. Большое спасибо, Тедди :-) - person Bernard Notarianni; 04.03.2013