在主干中向原型对象添加值不起作用
Adding a value to a prototype object in backbone not working
在主干中,我有一个视图,其中包含一个名为"mistakes_dict"的自定义原型对象。我想记录所犯的错误,所以我希望mistakes_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;
}
});
您在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
实际上附加到视图原型,因此您将在View
的所有实例之间共享单个mistakes_dict
对象;您可以将原型上的属性视为类属性。如果您希望在每个实例上具有不同的mistakes_dict
,请在构造函数中分配它:
window.View = Backbone.View.extend({
initialize: function () {
this.mistakes_dict = { };
this.render();
},
//...
mistakes_dict直接在视图上定义。
所以你需要使用this
上下文来访问它
mistakes_dict[mistakes_string[i]] = 1;
应该是
this.mistakes_dict[mistakes_string[i]] = 1;
相关文章:
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- Meteor-将选定窗体中的对象添加到集合中
- 在play2框架中向json对象添加下拉列表项
- 如何在javascript上向数组的对象添加新元素
- JSON到对象数组,并向每个对象添加项
- 如何将一个对象添加到每个对象数组中
- 向Angular作用域对象添加对象数组——TypeError
- CoffeeScript将对象添加到数组中
- 如何从Addon SDK向选项卡对象添加进度侦听器
- 使用ja将对象添加到HTML画布中
- 向通过ReST JSON调用生成的Angular Javascript对象添加方法
- 将新对象添加到本地存储
- 为什么可以'我们在函数体中为函数对象添加属性,就像在javascript中为对象文字添加属性一样
- 使用游标循环将JS对象添加到数组中
- 向调用全局javascript函数的对象添加处理程序
- 将另一个文件中的对象添加到单独文件中的阵列中
- 将对象添加到数组中
- 为新对象添加函数,将对象添加到数组中.理解困难'这'关键字
- sequelize为找到的对象添加值
- 向对象添加新方法和值,同时避免重复