【发布时间】:2013-11-08 22:43:15
【问题描述】:
在执行请求和一些逻辑之后,我正在尝试在 Controller/Mediator 的 start() 函数中初始化我的模块的 AppRouter。
这里的目标是确保用户满足应用程序的安全/身份验证要求,并获取更新的数据以用于完成在遵循路线时将触发的操作。
基本上页面加载,控制器start(),然后触发AJAX POST。根据 AJAX 响应的结果,我们将获得成功和一堆 json,在这种情况下,应该遵循路由,然后触发后续的控制器方法。 (示例代码假设成功)
这个 jsfiddle 中有一个更深入的例子。注意console.log() 的:http://jsfiddle.net/N5z2R/
我正在使用$.Deferred() 来确定ajax 调用是否成功完成:
var deferred = new $.Deferred();
$.ajax({
url: '',
type: 'POST'
}).done(function( data, textStatus, jqXHR ) {
// all good, get started
deferred.resolve();
});
$.when(deferred).then(function() {
DashboardList.router = new DashboardList.Router({
controller: DashboardList.controller
});
});
如果我在 AJAX 调用之外执行 deferred.resolve();,这会正常工作。然而,在调用中,当前路由永远不会被触发。不过,所有后续路线都按预期工作。
我是不是用 deferred 错了?
我对触发工作的路线的理解有误吗?
这是解决这个问题的完全迟钝的方法吗?
任何答案/建议将不胜感激。
谢谢!
更新:
看来我的主要问题是在Backbone.history 启动后加载 AppRouter。像这样更新它是有效的:
$.when(deferred).then(function(){
MyApp.DashboardList.start();
Backbone.history = Backbone.history || new Backbone.History({});
Backbone.history.start();
});
这有什么我可能忽略的问题吗?
【问题讨论】:
标签: jquery ajax backbone.js marionette jquery-deferred