2

次のようなカスタム関数を含む AMD 以外の JavaScript が 1 つあります。

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

カスタム js を AMD に変換する必要がありますか? この問題について誰か説明してくれませんか。ありがとう。

4

1 に答える 1

8

この問題には、Require documentationに記載されている一般的な理由がいくつかあります。

この場合、使用enforceDefine: trueしていて、「カスタム」js ファイルが を呼び出さないことが原因である可能性が最も高いですdefine()

enforceDefine: falseカスタム コードに適切なシムを設定または追加する必要があります。

shim の目的は、Require が AMD 以外のコードをロードできるようにすることです。これは、コードをロードし、スクリプトがプロパティで定義されているように、グローバル空間にプロパティを作成したことを確認することによって機能しexportsます。

あなたの場合、値getItemIndexByIdとして使用できexportsます:

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

値として使用Customしたexports場合、スクリプトがという変数を作成しなかったため、機能しませんでしたCustom

ここについてもっと読むshim

于 2013-10-02T03:22:23.960 に答える