0

http://jsfiddle.net/herrturtur/ExWFH/

これを試すには:

  1. プラスボタンをクリックし、
  2. 新しく作成された名前フィールドをダブルクリックし、
  3. フィールドに何かを記入してください
  4. Enter キーを押します。

時代フィールド (from および until) は正しく表示されますが、保存されず (リロードして効果を確認してください)、Name フィールドはまったく更新されません。

this.model.save()153 行目の NameView の close 関数 (Enter キーを押してトリガー) の属性を set() した後に呼び出します。

close: function(e){ 
    this.$el.removeClass('editing');
    this.model.set({
        value: this.$('.name-value').val(), 
        from: this.model.from, // this is saved in the 
        until: this.model.until
    });

    this.model.save();

    if(this.eraView.$el.attr('editing')){
        this.eraView.close();
    }
    this.render();
},

誰かが私が間違っていることを教えてもらえますか?

何よりも、TypeError: Illegal Invocation in Chrome が発生します。

4

2 に答える 2

1

あなたが抱えている問題は、close関数を呼び出すときです。

関数内で自分close自身を呼び出しているため、冗長性のループのように見えます。

JSビン

karass.EraViewでは、不要な関数内で同じ関数もトリガーしています。アクションの意図に対応する別の関数に名前を変更することをお勧めします。

this.trigger('close');
于 2013-02-03T18:45:29.527 に答える
0

このため、このエラーが発生します。 this.eraView.on('close', close);

そのはず: this.eraView.on('close', this.close, this);

次に、これを行うと:

this.model.set({
            value: this.$('.name-value').val(), 
            from: this.model.from, 
            until: this.model.until
        });

this.model.fromおよびthis.model.untilは未定義です。さらに、これらの属性は以前に設定済みです。モデルにはすでにそれらがあります。それらにアクセスしたい場合は、this.model.get('from')の代わりに行う必要がありますthis.model.from。ただし、モデルから値を取得して再設定する必要はありません。set他の2つはすでにそこにあるので、あなたはただ評価することができます。

他の問題も同様です。NameViewをレンダリングすると、次のようになります。

this.$el.html(this.template({value: this.model.value}));

this.model.get('value')以前と同じように、代わりに行う必要があります。

Chromeでいくつかのブレークポイントを設定して、コードをステップ実行する必要があります。それをステップスルーして、何がうまくいかないかを確認するのは非常に簡単です:)

jsFiddleを更新しました。

于 2013-02-03T19:01:35.400 に答える