有没有办法在嵌套视图中访问Ember模型?

时间:2013-05-17 01:01:32

标签: ember.js coffeescript ember-data

我正在尝试访问我正在编辑的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()

我在父视图上调用了toReadMode(),以便在焦点丢失或转义时退出编辑模式,从输入恢复为标准文本。

此代码运行正常,但调用this._context以访问ember模型及其当前状态会感觉很脏。有更好的方法吗?

1 个答案:

答案 0 :(得分: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');
    }
  }
});