如何在 Emberjs 中将事件从内部组件冒泡到应用程序控制器
How to bubble events from inner components to application controller in Emberjs?
我正在学习Ember并使用Emberjs编写一个简单的登录应用程序。我有一个登录框组件 - 处理 UI 和后端通信。成功登录后,我想将当前用户存储在某个地方,以便所有控制器都可以访问应用程序中的当前用户对象。我该怎么做?我正在使用this.sendAction('action')从LoginBoxComponent冒泡事件。事件正在正确冒泡到登录控制器(登录控制器的模板调用组件) - 但是由于登录控制器不在所有控制器的父路径中(我假设应用程序控制器是所有控制器的父级 - 如果我错了,请纠正我),我让事件冒泡到应用程序控制器,因为它不在登录控制器中处理它。然而,轨道抱怨
错误:未处理操作"用户登录"。如果您确实处理了 操作,此错误可能是由从操作返回 true 引起的 控制器中的处理程序,导致操作冒泡。
templates/login.hbs
<div class="col-sm-offset-3 col-sm-6">
{{login-box store=store action="userLogin"}}
</div>
我在组件/登录框中的成功处理程序.js
onSuccess: function(post) {
console.log(post);
this.sendAction('action');
},
控制器/应用程序中的代码.js
actions: {
userLogin: function() {
this.set('currentUser', '123');
this.transitionTo('index');
}
但是,如果我在 applicationRouter 中处理此操作,它会得到正确处理 - 我不明白为什么它会跳过应用程序控制器。我不想在应用程序路由器中处理它,因为我无法从那里设置全局当前用户对象。
非常感谢任何帮助。谢谢!
从组件发送的操作首先转到模板的控制器。
如果控制器未实现该操作的处理程序,它将冒泡到模板的路由,然后向上传递路由层次结构。有关此冒泡行为的详细信息,请参阅操作冒泡。
因此,您的操作正在冒泡:登录控制器 => 登录路由 =>应用程序路由。
相关文章:
- 通过emberJS中的控制器修改组件的属性
- EmberJs-将所有来自子组件的操作路由到父组件,再路由到父控制器
- 在javascript主组件中定义Apex控制器
- 如何观察控制器/组件内阵列的变化
- 如何将值从可视化力量组件中的脚本传递到其控制器
- 控制器中的 Emberjs-1.0 组件和计算属性
- Emberjs-1.0 将控制器实例传递给 ember 组件
- 无法识别余烬组件 - 绑定属性渗入控制器
- Ember js 2.0 将计算属性从控制器传递到组件
- 如何在 ExtJS5 中从控制器向视图添加组件
- Ember.js设置控制器属性表单组件
- AngularJS应用程序组件(模块、工厂、控制器)定义的确切工作方式
- 如何使用ui路由器在组件驱动架构中定义控制器
- 将控制器操作传递给EmberJS中的组件会返回未定义的结果
- 如何将应用程序控制器中声明的值传递给组件
- 通过聚合物核心页组件指定默认的熨斗控制器路由(内部元素)
- 如何从成员控制器或组件观察把手模板中的多个状态
- 使用`this$watch`而不是'scope$手表`with'控制器组件'
- Angular2 -共享组件控制器
- 如何在Angular 1.5和Typescript中获取组件控制器中的绑定值?