2012-12-16 95 views
1

主要思想:在我的控制器成功更新模型上的屬性之後,我想調用一個關閉子視圖的view方法。Ember - 在控制器方法之後如何調用View方法

模板:

<a {{action showUpdate href=true target="view"}}>update</a> 

    {{#if view.isUpdate}} 
     {{#view App.UpdateView}} 
      ...here is a form 
      <button {{action update}}>Send</button> 
     {{/view}} 
    {{/if}} 

查看:

App.MainView = Ember.View.extend({ 
    templateName: 'update', 
    isUpdate: false, 
    showUpdate: function() { 
     this.set('isUpdate', !this.get('isUpdate')); 
    } 
}); 

App.UpdateView= Ember.View.extend(); 

控制器:

App.MainController = Ember.Controller.extend({ 
    updateCon: function() { 
       do something 
    }, 
     ... 

路由器:

update: function(router, evt) { 
    router.get('mainController').updateCon(); 
    //router.get('mainController.view').showUpdate(); <-- doesnt work 
} 

所以我試圖在我的控制器做好之後在我的路由器中調用它,但它不起作用。

Cannot call method 'showUpdate' of null 

這是正確的做法嗎?當是時:我錯過了什麼?否:當我的控制器執行某些操作時如何使視圖變形?

+1

1。您的控制器不知道該視圖(它沒有提及它)。我認爲這在最近的一個發佈版中已經發生了變化。 2.爲什麼要在視圖中存儲屬性「isUpdate」?爲什麼不存儲在控制器中?這樣你可以在模板中使用{{#if isUpdate}},Ember會自動更新DOM。您的方法看起來很尷尬,因爲您嘗試手動更新視圖。 Ember中的常規方法是:更新模型,視圖自動反映更改。 – mavilein

回答

5

控制流邏輯更適合於控制器。保持視圖無狀態並且控制器不應該瞭解視圖通常是一個好主意。您可以將更新標誌和功能移動到您的控制器,並將您的Handlebars模板中的控制器作爲目標。視圖的把手模板會是這樣的:

<a href="#" {{action showUpdate target="controller"}}>update</a> 
{{#if isUpdated}} 
    ... 
{{/if}} 

然後,控制器將有更新的邏輯:

​​

認爲現在只不過是模板名稱:

App.MainView = Em.View.extend({ 
    templateName: 'update' 
});