1

在主干中,我有一个名为“mistakes_dict”的自定义原型对象的视图。我想记录所犯的错误,所以我希望 errors_dict 能够坚持下去。但是,当“next_stage”方法运行时没有定义errors_dict,我得到一个错误。为什么会这样?当我在 nexstage 方法中本地定义错误字典时,它可以正常工作,但是当然,下次运行该方法时,相同的字典将不可用。

作为旁注,如果字典尚不存在(值为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;
    }
});
4

2 回答 2

0

errors_dict 直接在视图上定义。

所以你需要使用this上下文来访问它

mistakes_dict[mistakes_string[i]] = 1;

应该是

this.mistakes_dict[mistakes_string[i]] = 1;
于 2013-09-09T01:50:29.753 回答
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_dictViewmistakes_dict

window.View = Backbone.View.extend({
    initialize: function () {
        this.mistakes_dict = { };
        this.render();
    },
    //...
于 2013-09-09T01:50:32.110 回答