如何在不触发观察者的情况下设置控制器的模型?

时间:2013-08-12 10:13:27

标签: ember.js

鉴于我有这个:

App.SomeController = Ember.ObjectController.extend({
  autosave: function(){
    //stuff
  }.observes('content.text', 'content.colour', 'content.webfont')
});

如何在没有触发自动保存的路线中设置SomeController的模型?

2 个答案:

答案 0 :(得分:6)

Emberjs没有支持暂停观察员至少in public api

我解决这个问题的方法是创建一个标志:

App.SomeController = Ember.ObjectController.extend({
  _suspendAutosave: false,
  suspendAutosave: function(fn) {
    this.set('_suspendAutosave', true);
    fn();
    this.set('_suspendAutosave', false);
  },
  autosave: function(){
    if (this.get('_suspendAutosave')) { return; }  
    // some code ...
  }.observes('content.text', 'content.colour', 'content.webfont')
});

在某个地方:

controller.suspendAutosave(function() {
  controller.set('content.text', 'foo');
});

这不酷,但这是我所知道的唯一方式。我希望它有所帮助。

答案 1 :(得分:1)

或者您可以使用:Ember.removeObserver()和Ember.addObserver()方法。