当在setupController中设置模型时,如何不在控制器中激发观测器



我为控制器中的模型属性设置了一个观测器函数。我一进入控制器的路线,它就会开火。

我知道这是因为setupController中的controller.set('model', model);。我该如何防止这种情况发生?

当一个属性发生更改时,我想使用observer来更改另一个属性。

但由于这种行为,我的逻辑导致了一个错误。。。。。

路线

MuteAdmin.NewRoute = Ember.Route.extend({
  model: function() {
    return this.store.createRecord(this.get('articleModelClassName'));
  },
  setupController: function(controller, model) {
    controller.set('model', model);
    this.store.find(this.get('categoryModelClassName')).then(function(categories) {
      controller.set('categories', categories);
      if (model.get('category') == null) {
        model.set('category', categories.get('firstObject'));
      };
    }.bind(this));
  },
  deactivate: function() {
    if(this.controller.get('isDirty')) this.controller.get('model').deleteRecord();
  }
});

控制器

MuteAdmin.NewController = Ember.ObjectController.extend(MuteAdmin.Modelable, {
  publicChanged: function() {
    console.log('How can I prevent this from printing when entering its route?');
  }.observes('public'),
  actions: {
    submit: function() {
      var currentUser = this.get('currentUser');
      var article = this.get('model');
      article.set('author', currentUser); 
      article.save().then(function() {
        this.set("flashSuccess", "Successfully Created.");
        this.transitionToRoute('index');
      }.bind(this), function() {
      });
    }
  }
});

可能不是Ember的方式,但当我需要在设置中操作模型和控制器时,我使用了一个标志来指示控制器正在设置。

类似这样的东西:

MyRoute = ProtectedRoute.extend({
    setupController: function (controller, model) {
        controller['settingController'] = true;
        controller.setProperties({
            'prop1Name' : val1,
            'prop2Name': val2,
            'propNName': valN
        });
        controller['settingController'] = false;
        // Call _super for default behavior
        this._super(controller, model);
    }
});
MyController = Ember.ObjectController.extend({
    anAfterChangeObserver: function() {
        if(controller['settingController']){
            return;
        }
        doSomethings();
    }.observes('prop1Name')
});

最新更新