я бы сделал щелчок в представлении, в котором вам понадобится 2 вида в моих глазах, 1 - это представление приложения, в котором хранится все ваше приложение, а другое - просто представление для каждой пользовательской модели, отображаемой в вашем списке.
здесь ваша пользовательская модель
var User = Backbone.Model.extend({
defaults: {
id: 0,
name: 'no-name'
}
});
здесь ваша коллекция
var Users = Backbone.Collection.extend({
model: User,
create : function(model, options) {
var coll = this;
options || (options = {});
if (!(model instanceof Backbone.Model)) {
model = new this.model(model, {collection: coll});
} else {
model.collection = coll;
}
var success = function(savedModel, resp) {
coll.add(savedModel);
if (options.success) options.success(nextModel, resp);
// fire success event
coll.trigger("savesuccess", savedModel);
};
var error = function(resp) {
if(options.error) options.error(resp);
// fire error event
coll.trigger("saveerror");
}
return model.save(null, {success : success, error : error});
}
});
, поэтому здесь возможное представление пользователя
var UserRow = Backbone.View.extend({
tagName: "li",
initialize: function(){
_.bindAll(this, 'render');
this.model.bind('change', this.render);
},
className: "user",
render: function() {
var user = this.model;
$(this.el).html(user.get('name'));
return this;
}
});
здесь ваше приложениеView
var AppView = Backbone.View.extend({
el: 'body',
events: {
'click button#btnSubmit': 'addUser'
},
initialize: function(){
this.collection = new Users();
this.collection.bind('add', this.appendUser);
this.collection.bind('savesuccess', this.saveSuccess);
this.collection.bind('saveerror', this.saveError);
this.counter = 0;
this.render();
},
addUser: function(){
this.counter++;
var user = new User();
user.set({
id: user.get('id') + this.counter,
name: $('#txtName', this.el).val()
});
this.collection.add(user);
},
appendUser: function(user){
var userRow = new UserRow({
model: user
});
$('ul#names', this.el).append(userRow.render().el);
},
saveSuccess: function(user){
alert('successfully saved, you can append something to the AppView DOM to show that saving was successful ...');
},
saveError: function(){
alert('failed to save, you can append something to the AppView Dom to show that saving failed, or remove the item again ...');
}
});
здесь вы инициализируете все это
var App = new AppView();
, как вы можете видеть, само рендеринг элементов не происходит после сохранения его в базе данных, он добавляется в коллекцию, appView связываетсяв событие add коллекции и добавляет нового пользователя в ваш список.
подключение к серверу CRUD работает автоматически благодаря использованию функции create в коллекции.
идеяздесь означает, что вам не нужно создавать пользовательские магистральные события, запускать событие из ваших успешных операций сохранения или сохранения ошибок, и позволить любому представлению привязываться к этому событию, чтобы что-то происходило на экране, когда сохранение былоуспех или нет.