Backbone.js查看被覆盖的变量

时间:2012-06-18 20:11:29

标签: javascript jquery backbone.js

我通过$ .each创建视图,所有视图的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?

2 个答案:

答案 0 :(得分:2)

当你这样写的时候 -

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

它为 initialize 函数创建一个本地变量(这是一个Javascript的东西,而不是Backbone的东西)。

请尝试此操作(在 View 对象中创建一个本地变量):

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

答案 1 :(得分:0)

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

这[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]。

有点问题,你可以参考这篇文章:

http://dmitrysoshnikov.com/ecmascript/chapter-4-scope-chain