[英]Ember.js - How to trigger view method from controller?
我試圖從控制器調用view方法,但不知道如何做到這一點。 從視圖中我可以很容易地調用控制器方法,如this.get('controller').send('method');
如何從控制器this.get('view').send('method');
執行類似的操作this.get('view').send('method');
?
為了讓您更好地了解我正在嘗試做什么。
我有應用程序控制器Ember.Controller.extend({})
我有應用程序視圖Ember.View.extend({})
和應用程序模板。
在應用程序模板是登錄表單,當用戶提交它時,執行控制器方法。 在這種方法中,如果登錄憑證不正確,我需要調用在登錄表單上執行jQueryUI
方法的view方法( jQueryUI
抖動方法並顯示一些文本)。
這對Ember.Evented
聽起來很有用。 通過使用事件訂閱和調度,您可以避免耦合視圖和控制器。
簡單地混合Ember.Evented
:
Controller = Ember.Controller.extend(Ember.Evented)
現在,您可以on
控制器上調用和trigger
方法,訂閱事件,然后啟動事件。 因此,在您看來,您可能會:
didInsertElement: function () {
this.get('controller').on('loginDidFail', this, this.loginFail);
}
然后在你的控制器中調用this.trigger('loginDidFail')
來啟動你的loginFail
視圖方法。
記得在視圖被解除后刪除處理程序...請參閱下面的答案。
只是想回答這個問題,以解決在清除視圖時(路由更改時)正確刪除偵聽器的問題。 它也沒有必要使用jquery代理,因為開/關方法支持目標,這很好,因為取消訂閱代理肯定更復雜。 修改克里斯托弗提供的內容:
didInsertElement: function()
{
this.get('controller').on('loginDidFail', this, this.loginFail);
},
willClearRender: function()
{
this.get('controller').off('loginDidFail', this, this.loginFail);
}
在不刪除訂閱的情況下,任何后續訪問登錄路由(無需重新加載頁面)都將添加其他偵聽器; 即內存泄漏,錯誤和意外行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.