绑定到Backbone.js中模型属性的属性
免责声明:我是来自AngularJS的Backbone.js新手,所以我可能对如何工作有一个不准确的心理模型 我有一个对象,characterNodes,我正在我的模型上创建一个属性。characterNodes看起来像这样:绑定到Backbone.js中模型属性的属性,backbone.js,jointjs,Backbone.js,Jointjs,免责声明:我是来自AngularJS的Backbone.js新手,所以我可能对如何工作有一个不准确的心理模型 我有一个对象,characterNodes,我正在我的模型上创建一个属性。characterNodes看起来像这样: var characterNodes = { character_1: { stories: [// list of Stories] }, character_2: { stories: [// list of Stories]
var characterNodes = {
character_1: {
stories: [// list of Stories]
},
character_2: {
stories: [// list of Stories]
}
...
}
var StoryGraph = joint.dia.Graph.extend({
initialize: function() {
// Call parent constructor
StoryGraph.__super__.initialize.apply(this, []);
this.set('characterNodes', characterNodes);
this.on('change:characterNodes', function() {
alert('test');
});
}
});
this.on('change:characterNodes', this.AlertSomething, this);
我的主干模型如下所示:
var characterNodes = {
character_1: {
stories: [// list of Stories]
},
character_2: {
stories: [// list of Stories]
}
...
}
var StoryGraph = joint.dia.Graph.extend({
initialize: function() {
// Call parent constructor
StoryGraph.__super__.initialize.apply(this, []);
this.set('characterNodes', characterNodes);
this.on('change:characterNodes', function() {
alert('test');
});
}
});
this.on('change:characterNodes', this.AlertSomething, this);
每个故事都有一个属性isUnlocked,该属性在应用程序的其他地方更改。我想触发一个事件,即,无论何时更改此属性,都应弹出警报“test”。按照上面的代码,事件似乎永远不会触发
我无法从主干文档中清楚地了解这是否应该起作用-当characterNodes的任何属性或子属性或子子属性等发生更改时,是否会触发“change:characterNodes”(更改:characterNodes)?或者只有当指向该对象的指针改变时,也就是说,当它被另一个对象替换时?还是我做错了什么?谢谢 尝试调用函数,而不是定义函数,并传递第三个参数以保留上下文调用 大概是这样的:
var characterNodes = {
character_1: {
stories: [// list of Stories]
},
character_2: {
stories: [// list of Stories]
}
...
}
var StoryGraph = joint.dia.Graph.extend({
initialize: function() {
// Call parent constructor
StoryGraph.__super__.initialize.apply(this, []);
this.set('characterNodes', characterNodes);
this.on('change:characterNodes', function() {
alert('test');
});
}
});
this.on('change:characterNodes', this.AlertSomething, this);
希望有帮助。主干网没有任何魔力,基本上,只有将characterNodes设置为新对象时,才会触发更改事件。如果您正在更改该对象的嵌套属性,主干不知道发生了什么。您有三个选项:a更改整个对象(例如,通过创建副本),b手动触发更改事件m.triggerchange:characterNodes每当您更改嵌套属性时,c不为此使用嵌套对象。将character1\u故事作为顶级属性 备选方案c更可取。尽量使模型中的属性保持平坦。选项a也可以,但它的缺点是必须复制对象。不建议选择b。这是因为主干跟踪模型属性m.previouscharacterNodes的先前值。如果更改嵌套特性,则以前的值将与新值对同一对象具有相同的引用,因此,它不会反映其以前的状态