Javascript 如何在ajax调用中执行控制器方法?

Javascript 如何在ajax调用中执行控制器方法?,javascript,backbone.js,marionette,Javascript,Backbone.js,Marionette,在木偶网或主干网中,在导航字段中更改url时执行路由。有没有办法在ajax调用中执行路由 如果您想触发路线更改,可以执行以下操作,但不建议这样做: yourRouterInstance.navigate("your_url_that_is_mapped",{trigger:true}); 相反,您需要将路线导航、数据加载和视图创建解耦,并实现相同的效果 创建一个控制器JS对象 使用主干.Events扩展此对象 var AppController = _.extend({},Backbone.E

在木偶网或主干网中,在导航字段中更改url时执行路由。有没有办法在ajax调用中执行路由

如果您想触发路线更改,可以执行以下操作,但不建议这样做:

yourRouterInstance.navigate("your_url_that_is_mapped",{trigger:true});
相反,您需要将路线导航、数据加载和视图创建解耦,并实现相同的效果

  • 创建一个控制器JS对象
  • 使用
    主干.Events扩展此对象

    var AppController = _.extend({},Backbone.Events);
    
  • 在此对象上创建方法并将其绑定到事件。
    3.1每种方法都将通过所需的
    ajax
    加载适当的数据。
    3.2创建适当的
    视图的实例

    3.3将加载的数据传递给
    视图的实例

    3.4调用
    导航
    方法并将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); 
    

  • 从主干文档:

    导航 router.navigate(片段,[选项]) 每当您在应用程序中到达要另存为URL的点时,请调用导航,以更新URL。如果还希望调用路由功能,请将触发器选项设置为
    true
    。要更新URL而不在浏览器历史记录中创建条目,请将“替换”选项设置为
    true

    因此,在ajax回调中,您可以执行以下操作:

    $.ajax({
      success: function () {
        app.navigate('path/to/your/route', {trigger: true})
      }
    })
    
    或者使用本机JS(在任何地方都支持),您可以自己更改哈希:

    $.ajax({
      success: function () {
        window.location = '#your/route/path/';
      }
    })
    
    这也将触发路由路径

    这两种解决方案都将在浏览器的历史记录中保存路线