我似乎对这个小片段有疑问。我已经摆弄了很长一段时间,并且当在同一模型的下一个实例化中更改同名的全局属性时,它会覆盖所有先前实例化的全局属性。
这个问题的影响打破了我正在构建的简单Web导航编辑器,其中每次获取Collection时,即使它们是相同Collection类型的单独实例,它们也会覆盖任何其他集合上的任何模型,因为被覆盖的全局变量。
毋庸置疑,我已经连续三天撞墙了,无法弄明白,也没有找到与此类问题相关的谷歌。非常感谢您对此问题的任何帮助。
JSFiddle:http://jsfiddle.net/alexgurrola/ruv11nkn/
// Create Example Model
var Model = Backbone.Model.extend({
globals: {
attributes: {},
set: function (prop, value) {
this.attributes[prop] = value;
},
get: function (prop) {
return this.attributes[prop]
},
has: function (prop) {
return _.has(this.attributes, prop);
},
iterate: function (prop) {
if (!this.has(prop)) this.set(prop, 0);
return ++this.attributes[prop];
}
},
local: "Unknown"
});
// Create First Instance
var Instance = new Model();
Instance.local = "Instance";
Instance.globals.set("name", "Instance");
// Create Second Instance, which will Overwrite the First, Unintentionally
var Overwrite = new Model();
Overwrite.local = "Overwrite";
Overwrite.globals.set("name", "Overwrite");
答案 0 :(得分:2)
因为您的$('.ui.checkbox').checkbox();
对象是使用$('.ui.checkbox').checkbox()
.on('change', e => fireEvent(e.target, 'input'));
function createEvent(name) {
var event = document.createEvent('Event');
event.initEvent(name, true, true);
return event;
}
function fireEvent(element, name) {
var event = createEvent(name);
element.dispatchEvent(event);
}
声明的,所以上下文绑定到该对象,而不是您稍后创建的实例。它基本上就像一个静态变量,因此每个实例都将引用相同的global
对象。
您似乎想要的是让模型的每个实例都拥有它自己的Model
,例如,通过在初始化函数中设置它而不是
attributes
这将确保每个实例创建自己的attributes
,并且在调用var Model = Backbone.Model.extend({
initialize: function () {
this.globals = {
attributes: {},
set: function (prop, value) {
this.attributes[prop] = value;
},
get: function (prop) {
return this.attributes[prop]
},
has: function (prop) {
return _.has(this.attributes, prop);
},
iterate: function (prop) {
if (!this.has(prop)) this.set(prop, 0);
return ++this.attributes[prop];
}
}
}
});
时正确绑定上下文。