簡體   English   中英

未捕獲的錯誤:通過require.js加載非AMD腳本時沒有定義調用

[英]Uncaught Error: No define call for when loading non AMD script by require.js

我有一個非AMD javascript,其中包含我的自定義函數,例如:

function getItemIndexById(items, id){
   for(var i = 0; i < items.length; i++){
       if(items[i].ID == id) return i;
   }
   return false;
}
//more than one define custom function here.

這里是main.js文件:

requirejs.config({
 enforceDefine: true,
 paths: {
    "jquery": "libs/jquery/jquery-min",
    "underscore": "libs/underscore/underscore-min",
    "backbone": "libs/backbone/backbone-min",
    "custom" : "libs/scripts/customejs"
},
shim: {
    "underscore": {
        deps: [],
        exports: "_"
    },
    "backbone": {
        deps: ["jquery", "underscore"],
        exports: "Backbone"
    }
}
});

然后我在我的視圖中定義:

define(["jquery" ,
        "underscore" ,
        "backbone" ,
        "custom"
],function($ , _ , Backbone, Custom){
  //.....
}

我在Uncaught Error: No define call for custom遇到Uncaught Error: No define call for custom

我是否必須將自定義js轉換為AMD? 請問有人能解釋一下這個問題。 謝謝。

Require文檔中描述了此問題的一些常見原因。

在這種情況下,最有可能是因為您使用的是enforceDefine: true ,並且“ custom” js文件未調用define()

您需要設置enforceDefine: false或為自定義代碼添加適當的填充程序。

填充程序的目的是允許要求加載非AMD代碼。 它的工作方式是加載代碼並驗證腳本是否在全局空間中創建了exports屬性所定義的屬性。

在您的情況下,您可以使用getItemIndexById作為exports值:

shim: {
   "custom": {
      exports: "getItemIndexById"
   }

當您使用Custom作為exports值時,它不起作用,因為您的腳本沒有創建名為Custom的變量

閱讀更多關於shim 信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM