ember.js 的新手。我要做的是:创建一个没有路径的过渡路线,当我过渡到它时,我可以将 AJAX 承诺作为模型传递给它,然后一旦承诺完成,它就会做出重定向决定。我希望在发生这种情况时调用 LoadingRoute 视图。我试图通过以下路线实现这一目标:
App.LoginUserRoute = Ember.Route.extend({
setupController: function(controller, model) {
//Model should be a promise
model.then(this.success.bind(this),this.failure.bind(this));
},
success: function (data) {
if (data.success) {
App.loggedInUser = App.User.create(data);
console.log(App.loggedInUser);
//Make redirection decision
}
else {
alert(data.error);
}
},
failure: function () {
//Failure code
}
});
但是,当我尝试将承诺传递给如下路线时:
var request = $.post("api.php", {action: 'create_user', username: this.username, password: this.password});
this.transitionToRoute('loginUser',request);
我收到错误“传递的上下文对象多于路由的动态段:loginUser”,因为我正在尝试创建无路径路由,而 Ember 要求在使用 transitionToRoute() 传递时将模型序列化到路径中。
我需要这个的原因是:
- 登录事件可以从多个控制器发生(当用户注册时,当他们使用登录屏幕登录时,或者当检测到正确的 cookie 时首次加载应用程序时),我不想在所有这些控制器中复制登录逻辑.
- 登录完成后,根据返回的用户对象的性质,可以将用户定向到多个不同的路由。
- 我希望在请求完成时调用 LoadingRoute。
我认为我的问题的解决方案不是使用路由,而是使用其他东西。但是,我不确定“其他东西”会是什么。