Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.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
Javascript Backbone.js视图变量被覆盖_Javascript_Jquery_Backbone.js - Fatal编程技术网

Javascript Backbone.js视图变量被覆盖

Javascript Backbone.js视图变量被覆盖,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,我是通过$创建视图的。所有视图的每个和myId属性最终都会被最后一个元素的myId覆盖 创建视图 $('.form').each(function() { // split class name var classNameArray = $(this).attr('class').split('-'); // get typeId from last part of classname var myId = classNameAr

我是通过$创建视图的。所有视图的每个和myId属性最终都会被最后一个元素的myId覆盖

创建视图

 $('.form').each(function() {
        // split class name
        var classNameArray = $(this).attr('class').split('-');
        // get typeId from last part of classname
        var myId = classNameArray[classNameArray.length-1];
        new myView({ 'el': $('.form-' + myId), 'myId': myId });      
    });
我的视图的初始化

var myView = Backbone.View.extend({
events: {

},
initialize: function() {
    var myId = this.options.myId;

},
test: function() {
    console.log(myId); // will return myId of last view created
}

});

我怎样才能让视图保持其唯一的myId?

当您这样编写它时--

它为initialize函数创建了一个局部变量(这是Javascript的东西,而不是主干)

请尝试以下操作(创建视图对象的局部变量):

此[myId]不是以下文件中的[myId]:

initialize: function() {
    var myId = this.options.myId;    
}
它是来自以下地址的[myId]:

$('.form').each(function() {
        // split class name
        var classNameArray = $(this).attr('class').split('-');
        // get typeId from last part of classname
        var myId = classNameArray[classNameArray.length-1]; //from this myId!!!
        new myView({ 'el': $('.form-' + myId), 'myId': myId });      
 });
因为:

第一:

"var myId = this.options.myId; "
此[myId]是局部变量内的初始化,您不能在方法外访问此变量

第二:

console.log(myId); // will return myId of last view created
为什么我们可以在这里访问[myId]?因为[myId]是[this.myId],[this]是调用方法的上下文:

new myView({ 'el': $('.form-' + myId), 'myId': myId }); 
因此,这个[myId]是:

var myId = classNameArray[classNameArray.length-1];
[myId]here.this[myId]是循环变化,所以您总是会在最后一个循环中得到[myId]的值

解决方案:

initialize: function() {
    this.myId = this.options.myId;
},
由于[this.myId]是[myView]的内部变量,因此每次创建[myView]的实例时,在[initialize]方法中,[this.myId]都会动态设置为正确的值形式[this.options.myId]

这类问题,您可以参考本文:

initialize: function() {
    this.myId = this.options.myId;
},

var myId = classNameArray[classNameArray.length-1];
initialize: function() {
    this.myId = this.options.myId;
},