2

現在編集中の ember モデル オブジェクトのモデルにアクセスしようとしています。私はビューをレンダリングしています:

    {{view App.RemarkTextField valueBinding="content"}}

そして、ここにビューがあります:

    App.RemarkTextField = Ember.TextField.extend
      focusOut: (evt) ->
        @state = @_context.get("stateManager.currentState")
        if (@state.name == "saved")
          @rollback()

      keyUp: (evt) ->
        @rollback() if evt.keyCode == 27

      rollback: ->
        @._context.transaction.rollback()
        @get('parentView').intoReadMode()

親ビューで intoReadMode() を呼び出して、フォーカスが失われるかエスケープされたときに編集モードを終了します。これにより、入力から標準テキストに戻ります。

このコードは正しく機能していますが、 this._context を呼び出して ember モデルとその現在の状態にアクセスするのは面倒です。これを行うより良い方法はありますか?

4

1 に答える 1

1

合意された呼び出しthis._contextは、何かが正しくないことを示しています。この場合、コントローラーを介してモデルにアクセスする方がよいでしょう。

App.RemarkTextField = Ember.TextField.extend({
  focusOut: function(evt) {
    console.log('controller', this.get('controller'));
    var state = this.get("controller.stateManager.currentState.name");
    console.log('state', state);  
  }
});

FWIW モデル アクセスとロールバック メソッドをコントローラーに移動することはおそらく理にかなっています。次に、コントローラーのプロパティに基づいて読み取り専用モードに入る/出るように、parentView をリファクタリングします。

App.RemarkTextField = Ember.TextField.extend({
  focusOut: function(evt) {
    this.get('controller').send('rollback');
  },
  keyUp: function() {
    if (evt.keyCode == 27) {
      this.get('controller').send('rollback');
    }
  }
});
于 2013-05-17T02:34:37.417 に答える