如何将jQuery ajaxPrefilter方法应用于所有require.js视图?

时间:2013-03-06 21:48:04

标签: jquery backbone.js requirejs underscore.js

这是我第一次问一个问题,所以要温柔。我是第一次使用requirejs(连同Backbone和Underscore),我在视图中使用jQuery ajaxPrefilter方法为ajax调用设置基本URL,如此...

$.ajaxPrefilter(function(options, originalOptions, jqXHR) {
options.url = '//mysite.com' + options.url;});

这样我可以在我的模型/集合中使用像“/ notes”这样的简单网址。现在看来我必须在每个视图中放置ajaxPrefilter调用。在某个地方,我可以调用一次,并将其应用于所有视图吗?

谢谢。

2 个答案:

答案 0 :(得分:4)

我和你做了同样的事情:

    $.ajaxPrefilter( function( options, originalOptions, jqXHR ) {
        options.url = App.config.getValue('api') + options.url;
    });

如果你正在使用Backbone.Router,你可以把它放在初始化函数中,就像我一样。

    define([
        'jquery',
        'underscore',
        'backbone',
        'app',
    ],
    function($, _, Backbone, App) {

        return Backbone.Router.extend({

            routes: {
                        '' : 'index'
                    },
                    start: function() {
                       Backbone.history.start({pushState: true});
                    }
                    initialize: function() {
                        $.ajaxPrefilter( function( options, originalOptions, jqXHR ) {
                         options.url = App.config.getValue('api') + options.url;
                       });
                    }
            });
    });

App.config是我添加的内容,因此我为每个环境获取了正确的URL。

答案 1 :(得分:0)

如果你有多个路由器,不确定它真的是个好主意......

在这种情况下,我们已经在我们的主应用程序中添加了jquery inits,就在启动第一个Backbone路由器之前......

myApp = {
    (....)


initialize : function(){

    // jQuery.ajax()cross-domain config
    $.ajaxSetup({xhrFields: {withCredentials: true}});

    // Start routers
    DefaultRouter.initialize();
(....)
}