我正在学习Ember,并使用Emberjs编写了一个简单的登录应用程序。我有一个登录框组件-处理UI和后端通信。成功登录后,我想将当前用户存储在某个地方,以便所有控制器都可以访问应用程序中的当前用户对象。我怎样才能做到这一点?我正在使用this.sendAction('action')从LoginBoxComponent冒泡事件。该事件正在正确地冒泡到LoginController(Login Controller的模板调用该组件)-但是由于loginController不在所有控制器的父路径中(我假设applicationController是所有控制器的父级-如果我错了请更正我),我让通过不在LoginController中处理事件,事件气泡上升到应用程序控制器。但是Rails抱怨
错误:什么都没有处理“ userLogin”操作。如果您确实处理了该动作,则可能是由于从控制器中的动作处理程序返回true导致此错误起泡而导致的。
模板/login.hbs
<div class="col-sm-offset-3 col-sm-6">
{{login-box store=store action="userLogin"}}
</div>
我在components / login-box.js中的成功处理程序
onSuccess: function(post) {
console.log(post);
this.sendAction('action');
},
controllers / application.js中的代码
actions: {
userLogin: function() {
this.set('currentUser', '123');
this.transitionTo('index');
}
但是,如果我在applicationRouter中处理此操作,它将得到正确处理-我不明白为什么它跳过了应用程序控制器。我不想在应用程序路由器中处理它,因为我无法从那里设置全局currentUser对象。
非常感谢您的帮助。谢谢!
从组件发送的操作首先进入模板的控制器。
如果控制器没有为该操作实现处理程序,它将冒泡到模板的路由,然后上升到路由层次结构。有关此冒泡行为的更多信息,请参见动作冒泡。
因此,您的操作正在冒泡:登录控制器=>登录路由=>应用程序路由。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句