2016-01-13 53 views
-1

我试着用下面的代码使用要求JS使用jquery,主干,下划线使用requirejs全局?

require.config({ 
    waitSeconds: 0, 
    paths: { 
     underscore: 'underscore/underscore', 
     backbone: "backbone/backbone-min", 
     jquery: "jquery/jquery-min", 
     customhandler: "jquery/customhandler" 
    }, 
    shim: { 
     underscore: { 
      deps: ['underscore'], 
      exports: '_' 
     } 
    } 
}); 

创建单独的文件customhandler.js和里面我想使用骨干,jQuery的,包括我的自定义JS文件,强调

define(['jquery','underscore','backbone'], function($,_,Backbone) { 
    //using jquery 
    var oldAjax = $.ajax; 

    $.ajax = function(options) { 
     console.log(options) 
     // Do your magic. 
     return oldAjax.apply($, arguments); 

    } 
    //need to use backbone,underscore here 
}); 

但我仍然不能让它加载到我的应用程序。请告知。

+0

我在下面的回答中指出你的'shim'为'jqueryajaxhandler' *是一个问题。它可能不是唯一的问题,但它仍是一个问题。这绝对是错误的。所以你应该删除它。另外,你的编辑还远离[mcve]。你现在的问题没有什么能够锻炼你的重写。 – Louis

+0

@Louis现在更新我的问题。对困惑感到抱歉。 – mymotherland

+1

@mymotherland其中是您的脚本从配置的入口点? – Nirus

回答

0

jQuery已经是AMD兼容了,所以看起来像你不能用这种方式来弥补这种依赖。

从官方文档: http://requirejs.org/docs/api.html#config-shim

记住:只使用非AMD脚本垫片配置...

作为一种原始的解决方法,你可以返回喜欢另一个对象:

return { ajax : $.ajax }; 

或者如果需要更聪明。

0

调用define的模块不需要使用shim。如果您使用shim和一个调用define的模块,您会得到未定义的行为。所以这可能是你遇到问题的原因:删除你的垫片jqueryajaxhandler

+0

我尝试删除jqueryajaxhandler的填充程序,仍然无法工作 – mymotherland