Model view controller 如何在backbone.js模型中更改一个方法中的属性值并在另一个方法中获取它?
这是我的模型:Model view controller 如何在backbone.js模型中更改一个方法中的属性值并在另一个方法中获取它?,model-view-controller,backbone.js,Model View Controller,Backbone.js,这是我的模型: var AppModel = Backbone.Model.extend({ defaults : { xmlDeclarationAndDoctype : '' }, renderFoobar : function () { this.set({'xmlDeclarationAndDoctype' : 'foobar'}); this.fetchFoobar(); }, fetchFoo
var AppModel = Backbone.Model.extend({
defaults : {
xmlDeclarationAndDoctype : ''
},
renderFoobar : function () {
this.set({'xmlDeclarationAndDoctype' : 'foobar'});
this.fetchFoobar();
},
fetchFoobar : function () {
console.log(this.get('xmlDeclarationAndDoctype'));
},
fetchAgain : function () {
console.log(this.get('xmlDeclarationAndDoctype'));
}
});
我的看法是:
window.AppView = Backbone.View.extend({
initialize : function () {
model = new AppModel({});
},
render : function () {
model.renderFoobar();
}
});
当我在HTML页面中调用以下代码时,一旦呈现页面,我就会得到“foobar”
$(window).load(function () {
var appView = new AppView;
});
在该页面中,单击一个按钮后,我调用一个函数,该函数具有以下代码,但这次我得到的是一个空字符串,而不是“foobar”
model = new AppModel({});
model.fetchAgain();
上面的代码有什么问题
更新:
已经给出了正确的答案,非常感谢!。我只想在下面给出的正确答案中加上摘录
AppView#initialize中的newappmodel({})
与其他地方的newappmodel({})
不同
演示:在AppView#initialize
中创建的新AppModel({})
与在按钮处理程序中创建的新AppModel({})不同。您正在查看两个不同模型的xmldecarationanddoctype
属性,并得到两个不同的结果
调用newappmodel(o)
,对于某些选项集o
,两次并不能得到相同的对象。主干网不会跟踪它创建的所有对象,这是您的工作或集合的工作。如果查看型号的cid
,您将看到:
您可能需要一个帮助跟踪您的模型
你有更多的问题。您的视图正在使用一个全局变量,model
:
window.AppView = Backbone.View.extend({
initialize : function () {
model = new AppModel({}); // This is a global
},
这可能会在按钮处理程序中被覆盖。您应该将型号
附加到此
:
window.AppView = Backbone.View.extend({
initialize : function () {
this.model = new AppModel({});
},
render : function () {
this.model.renderFoobar();
}
});
或者像这样:
window.AppView = Backbone.View.extend({
render : function () {
this.model.renderFoobar();
}
});
// And elsewhere...
var v = AppView.new({ model: new AppModel({}) });
在AppView\initialize
中创建的newappmodel({})
与在按钮处理程序中创建的newappmodel({})
不同。您正在查看两个不同模型的xmldecarationanddoctype
属性,并得到两个不同的结果
调用newappmodel(o)
,对于某些选项集o
,两次并不能得到相同的对象。主干网不会跟踪它创建的所有对象,这是您的工作或集合的工作。如果查看型号的cid
,您将看到:
您可能需要一个帮助跟踪您的模型
你有更多的问题。您的视图正在使用一个全局变量,model
:
window.AppView = Backbone.View.extend({
initialize : function () {
model = new AppModel({}); // This is a global
},
这可能会在按钮处理程序中被覆盖。您应该将型号
附加到此
:
window.AppView = Backbone.View.extend({
initialize : function () {
this.model = new AppModel({});
},
render : function () {
this.model.renderFoobar();
}
});
或者像这样:
window.AppView = Backbone.View.extend({
render : function () {
this.model.renderFoobar();
}
});
// And elsewhere...
var v = AppView.new({ model: new AppModel({}) });
@我已经更新了这个问题。请看一下。@muistooshort:我已经更新了这个问题。请看一看。感谢您费尽心思写下这么长的答案。@codeformer,记住向上投票和/或接受好的答案;)@橡子:偏离航线的人!但是我已经更新了mu的答案,但他还没有接受。谢谢你花了很大的精力来写这么长的答案。@codeformer,记住向上投票和/或接受好的答案;)@橡子:偏离航线的人!但我已经更新了穆的答案,但他还没有接受。