2014-09-05 28 views
1

我爲控制器中的模型屬性設置了觀察者函數。 並且一旦我進入該控制器的路由,它就會啓動。如何在setupController中設置模型時在控制器中啓動觀察器?

我知道這是因爲controller.set('model', model);setupController。我怎樣才能防止這一點?

我想使用觀察者在屬性更改時更改另一個屬性。

,因爲這種行爲我的邏輯會導致一個錯誤,但.....

路線

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() { 

     }); 
    } 
    } 
}); 
+1

那怎麼特性/控制器上的工作觀察者,如果模型的變化,所有的屬性被監視無效。邏輯可能需要被推上一個級別到你的模型。 – Kingpin2k 2014-09-05 18:06:07

回答

0

可能不是灰燼方式,但是當我需要在設置上操縱模型和控制器我使用了一個標誌來指示控制器正在設置。

事情是這樣的:

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') 
}); 
相關問題