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 回答