在Marionette或Backbone中,路线在导航栏中更改网址时执行。有没有办法在ajax调用上执行路由?
答案 0 :(得分:2)
如果您想触发路线更改,您可以执行以下操作,不建议这样做:
yourRouterInstance.navigate("your_url_that_is_mapped",{trigger:true});
相反,您需要将路线导航,数据加载和视图创建分离,并实现相同的效果。
使用Backbone.Events
扩展此对象。
var AppController = _.extend({},Backbone.Events);
在此对象上创建方法并将它们绑定到事件
3.1此方法中的每一种都将通过所需的ajax
加载适当的数据
3.2创建相应view
的实例
3.3将加载的数据传递给view
的实例
3.4调用navigate
方法并将URL更新为相应的URL。
AppController.on("any_custom_event",function(payload) {
// MAKE THE AJAX CALL.
// AFTER SUCCESSFUL CALL INSTANTIATE THE VIEW AND PASS THE DATA .
// CALL yourAppRouter.navigate("your_current_url",{trigger:false});
});
从路线回调/需要的位置触发此自定义事件。
//in router callbacks
AppController.trigger("any_custom_event",payload);
// In other places where required like inside an ajax success call back:
AppController.trigger("any_custom_event",payload);
答案 1 :(得分:0)
来自Backbone文档:
导航
router.navigate(fragment,[options])
每当您在应用中确定要保存为网址时,请致电导航以更新网址。如果您还想调用路线功能,请将触发器选项设置为
true
。要更新网址而不在浏览器的历史记录中创建条目,请将替换选项设置为true
。
在ajax回调中,你可以做类似的事情,
$.ajax({
success: function () {
app.navigate('path/to/your/route', {trigger: true})
}
})
或者使用原生JS(在任何地方都支持),您可以自己更改哈希:
$.ajax({
success: function () {
window.location = '#your/route/path/';
}
})
那也将触发路径路径。
这两种解决方案都会在浏览器的历史记录中保存路线。