Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Model view controller 如何在backbone.js模型中更改一个方法中的属性值并在另一个方法中获取它?_Model View Controller_Backbone.js - Fatal编程技术网

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,记住向上投票和/或接受好的答案;)@橡子:偏离航线的人!但我已经更新了穆的答案,但他还没有接受。