我通过$ .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?
答案 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]。
有点问题,你可以参考这篇文章: