Javascript Backbone.js视图变量被覆盖
我是通过$创建视图的。所有视图的每个和myId属性最终都会被最后一个元素的myId覆盖 创建视图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
$('.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;
},