1

バックボーンには、「mistakes_dict」と呼ばれるカスタム プロトタイプ オブジェクトを含むビューがあります。犯した間違いを記録しておきたいので、miss_dict を持続させたいと思います。ただし、「next_stage」メソッドを実行すると、miss_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;
    }
});
4

2 に答える 2

0

miss_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_dictオブジェクトが ; のすべてのインスタンス間で共有されますView。プロトタイプのプロパティは、一種のクラス プロパティと考えることができます。各インスタンスに個別のものが必要な場合mistakes_dictは、コンストラクターで割り当てます。

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