Непревзойденный Backbone.Model.set(...)
. Я никогда не нуждался в этой функциональности ... дизайн «только огонь, когда он менялся» поощряет лучшие практики распространения событий, я думаю. Но вы можете просто предоставить метод, который молча удаляет значение, а затем снова устанавливает его снова.
Edit: Per mu is too short
«s комментарий ниже, вы также должны обрабатывать возможность setLoudly
даться хэш атрибутов. Таким образом, потребность в clearSilently
метод, который обрабатывает как отдельные атрибуты, а также хэши:
var MyModel = Backbone.Model.extend({
setLoudly: function(attr, value, options) {
this.unset(attr, { silent: true });
return Backbone.Model.prototype.set.call(this, attr, value, options);
},
clearSilently: function(attr) {
if (_.isString(attr)) {
this.unset(attr, { silent: true });
} else {
_.each(_.keys(attr), function(key) {
this.unset(key, { silent: true });
}, this);
}
}
});
var myModel = new MyModel({
foo: "bar",
baz: 4
});
myModel.set('foo', 'bar'); // <<=== No Event
myModel.setLoudly('foo', 'bar'); // <<=== One 'change change:foo' event
myModel.set({
foo: "bar",
baz: 4
}); // <<=== No Events
myModel.setLoudly({
foo: "bar",
baz: 4
}); // <<=== Will receive 'change change:foo change:baz'
Если вы хотите всегда использовать этот метод при установлении данных, просто назовите его set
вместо setLoudly
и вы должны быть хорошо. YMMV.
Совершенно верно. Расширено решение для адреса. –