如何从控制器触发视图方法
Ember.js - How to trigger view method from controller?
我试图从控制器调用视图方法,但不知道如何做到这一点。从视图中,我可以很容易地调用控制器方法,如this.get('controller').send('method');
如何从控制器this.get('view').send('method');
做类似的事情?
为了让你更好地了解我在做什么
我有应用控制器Ember.Controller.extend({})
我有应用视图Ember.View.extend({})
和应用模板
在应用模板的登录表单中,当用户提交时执行控制器方法。在这种方法中,如果登录凭据不正确,我需要调用视图方法,该方法正在登录表单上执行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代理,因为on/off方法支持目标,这很好,因为取消订阅代理肯定更复杂。修改Christopher提供的内容:
didInsertElement: function()
{
this.get('controller').on('loginDidFail', this, this.loginFail);
},
willClearRender: function()
{
this.get('controller').off('loginDidFail', this, this.loginFail);
}
不删除订阅,任何后续访问登录路由(不重新加载页面)将添加额外的监听器;例如,内存泄漏、错误和意外行为。
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 主干:视图's的呈现方法被调用,但DOM未更新
- 在主干视图中调用render()方法的好方法
- 有没有一种方法可以将媒体打印css启用为普通视图
- 在主干视图中的每个方法之后是否需要“返回此内容”
- 如何将经度/经度值绑定到挖空视图模型方法
- Backbone js代码气味-嵌入子视图的更好方法
- Backbone js视图渲染点击方法未调用[Very Basic]
- 将返回值作为主干视图方法之间的参数传递
- 主干 - 从我的原型视图调用方法.js
- 从 Angular.js 视图中修改方法中的数据的最佳做法
- 从 JavaFX Web 视图调用 Java 方法
- Extjs 5.1:视图控制器中的方法未调用
- 带有翡翠视图引擎的Hapijs显示错误的最佳方法
- 从 JavaScript 调用 ruby 方法或从 RoR 中的视图中传递参数
- JSF:在视图被 AJAX 调用更新后立即调用 javaScript 方法
- 如何使用 Ajax 调用在 MVC 中的返回视图方法中返回 JSON 数据
- 从谷歌浏览器控制台内部调用主干视图方法
- Django/Python:在不同时间使用用户上传的文件用于两个不同的视图方法
- 如何从控制器触发视图方法