在骨干网中,我有一个名为" mistakes_dict"的自定义原型对象的视图。我想记下所犯的错误,所以我希望misrors_dict坚持下去。但是当" next_stage"方法运行,未定义mistakes_dict。为什么会这样?当我在nexstage方法中本地定义错误dict时,它工作正常,但当然下次方法运行时,相同的字典不可用。
作为旁注,如果字典尚未存在(值为1),如何使字典创建新密钥,如果它存在则将其递增1?我知道如何在Python中执行此操作,但我是JS的新手。
window.View = Backbone.View.extend({
mistakes_dict: {},
initialize: function () {
this.render();
},
events: {
"click .nextstage" : "nextstage"
},
nextstage: function () {
var mistakes_string = $("span.highlighted").text();
for(var i = 0, len = mistakes_string.length; i < len; i++){
mistakes_dict[mistakes_string[i]] = 1;
};
},
render: function () {
this.$el.html(this.template(this.model.toJSON()));
return this;
}
});
答案 0 :(得分:0)
mistakes_dict 直接在视图中定义。
因此您需要使用this
上下文来访问它
mistakes_dict[mistakes_string[i]] = 1;
应该是
this.mistakes_dict[mistakes_string[i]] = 1;
答案 1 :(得分:0)
您在window.View = Backbone.View.extend({ ... })
中定义的内容会附加到原型中,因此您必须通过this
访问它们:
for(var i = 0, len = mistakes_string.length; i < len; i++){
this.mistakes_dict[mistakes_string[i]] = 1;
}
当然,由于mistakes_dict
实际上已附加到视图原型,因此您在mistakes_dict
的所有实例之间共享一个View
对象;您可以将原型上的属性视为一类属性。如果你想在每个实例上有一个不同的mistakes_dict
,那么在构造函数中分配它:
window.View = Backbone.View.extend({
initialize: function () {
this.mistakes_dict = { };
this.render();
},
//...