Что мне нравится делать, так это инициализировать «Вид» с маршрутизатора с «Моделью», если я редактирую, и без «Модели», если я создаю новую «Модель» с нуля.
Идея была бы:
var Workspace = Backbone.Router.extend({
routes: { '/collection/:id' : 'edit_model',
'/collection/newObject' : 'new_model
},
new_model : function(){
myView = new A_View();
},
edit_model : function(){
myView = new A_View({model:aModel});
}
});
А затем, в методе 'render', проверьте модель в этом экземпляре представления.
Но .. это работает, только если ваше приложение использует разные маршруты для редактирования и создания моделей. Может быть, вы делаете все по тому же маршруту самым сложным образом (или у вас есть другие причины).
Вы можете попробовать что-то вроде этого:
Определите вашу model.save
функцию «success» в представлении (т. Е. Точно так же, как вы определяете submit_form в вашем примере) и добавьте строку кода, где вы связываете модель с этим представлением:
successSaving : function( model ){
Myapp.Collection.add( model );
this.model = model; //here you save the model in your view.
}
Чтобы это работало, вы должны привязать представление к новой функции успеха (именно поэтому вы определяете ее снаружи).
Вы можете сделать это в функции инициализации представления следующим образом (больше информации о _bind здесь ):
_.bindAll(this, 'successSaving');
Теперь, в вашем методе 'render' вы можете визуализировать форму и после этого проверить, является ли 'this.model
' неопределенным, если нет, теперь вы знаете, что вам нужно заполнить содержимое.
Отказ от ответственности: я не проверял код, поэтому, вероятно, копировальная паста не сработает, но, надеюсь, вы поймете идею.