我正在尝试在 Controller/Mediator 中初始化我的模块的 AppRouterstart()
在执行请求和一些逻辑之后,
此处的目标是确保用户满足应用程序的安全/身份验证要求,并获取更新的数据以用于完成在遵循路线时将触发的操作。
基本上页面加载,控制器start()
,然后触发 AJAX POST。根据 AJAX 响应的结果,我们将获得成功和一堆 json,在这种情况下,应该遵循路由,然后触发后续的控制器方法。(示例代码假定成功)
更深入的示例在这个 jsfiddle 中。注意console.log()
's:http: //jsfiddle.net/N5z2R/
我正在使用 a$.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
});
});
如果我执行deferred.resolve();
AJAX 调用的外部,这可以正常工作。然而,在调用中,当前路由永远不会被触发。不过,所有后续路线都按预期工作。
我使用延迟错误吗?
我对如何理解触发工作的路线有误吗?
这是解决这个问题的完全迟缓的方法吗?
任何答案/建议将不胜感激。
谢谢!
更新:
看起来我的主要问题是在Backbone.history
启动后加载 AppRouter。像这样更新它有效:
$.when(deferred).then(function(){
MyApp.DashboardList.start();
Backbone.history = Backbone.history || new Backbone.History({});
Backbone.history.start();
});
这有什么问题我可能会忽略吗?