如何为此属性名称添加事件:Lorem Ipsum
?
我试过
this.model.on("change:Lorem Ipsum")
但它给了我两个事件:
答案 0 :(得分:2)
正如您在评论中所述,文档声明由于事件接受空格分隔的事件列表,因此属性名称不应包含空格。 1 < / p>
但是,如果您愿意承担Backbone的未来版本将如何处理此问题的风险,请深入研究Backbone源代码并损害您的理智,您可以覆盖模型上的Events
机制:
var M = Backbone.Model.extend({
on: function(name, callback, context) {
if (name!=='change:Lorem Ipsum') {
return Backbone.Model.prototype.on.call(this,name, callback, context);
}
this._events = this._events || {};
this._events[name] = this._events[name] || [];
this._events[name].push({
callback: callback,
context: context,
ctx: context || this
});
return this;
},
trigger: function(name) {
if (name!=='change:Lorem Ipsum') {
return Backbone.Model.prototype.trigger.apply(this, arguments);
}
var events = this._events && this._events[name];
if (!events) return this;
var ev, i = -1, l = events.length, args = [].slice.call(arguments, 1);
while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args);
// I skipped the all event
return this;
}
});
这个想法是根据事件模块的当前实现自己处理事件的注册和发布。如果需要,您还必须修改其他方法。
设置Lorem Ipsum
属性将作为&#34;预期&#34;:
var m = new M();
m.on("change", function(model) {
console.log('change', model.changedAttributes());
});
m.on("change:Lorem Ipsum", function(model) {
console.log('change:Lorem Ipsum', model.changedAttributes());
});
m.set('Lorem Ipsum', 'dolor sit amet');
答案 1 :(得分:0)
LoremIpsum必须说一句话。
this.model.on(&#34;更改:LoremIpsum&#34;,YourFunction)