2012-10-12 7 views
5

Ich habe die folgende requireJS-Konfiguration. Beim Versuch, auf das Paket/ImagingX-Modul zu verweisen, werde ich immer undefiniert, obwohl ich sehen kann, dass das Skript in Firebug geladen wurde. Wenn ich die betreffende js-Datei in das baseUrl-Verzeichnis verschiebe und das Paket lösche, funktioniert es wie erwartet.RequireJS Skriptdatei laden, aber die übergebene Referenz ist nicht definiert

Was mache ich falsch?

window.requirejs.config(
     { 
      baseUrl: '/Scripts', 
      paths: { 
       "jquery": "./jquery-1.7.1.min", 
       "jqx": "/Content/Plugins/jqWidgets", 
       "package" : "/Scripts/packages" 
      }, 
      urlArgs: "bust=" + (new Date()).getTime(), 
      shim : { 
       'jqx/jqxcore': ['jquery'], 
       'jqx/jqxsplitter': ['jquery','jqx/jqxcore'] 
      } 
     } 
    ); 

    window.require(['jquery', 'layoutManager', 'container', 'package/ImagingX'], 
     function ($,lm,container,px) { 

      px.Focus(); 

      $(document).ready(function() { 
       lm.Init(); // Sets up panes 
       container.Init(); //Set up the containers 
      }); 
    }); 

aktualisieren 15/10/2012

Ich bin immer verzweifelter um dieses Problem jetzt zu lösen, habe ich so hier, um die Grundlagen beraubt alles wieder ist die neue Hauptdatei:

(function() { 

    requirejs.config({ 
     paths: { 
      "packages": "packages" 
     } 
    }); 

    require([ 
      'packages/testmodule' 
     ], 
     function (tm) { 
       alert(tm); 
    }); 

})(); 

Und das Modul, das in einem Unterordner namens Pakete ist.

define('testmodule', 
function() { 

    alert("called"); 

    return { 
     set : 'rar '  
    }; 

}); 

Ich kann das Skript geladen sehen, aber es wird nie ausgeführt, daher bekomme ich nie eine Referenz dafür.

enter image description here

Antwort

3
requirejs.config({ 
     paths: { 
      //"jquery": "./jquery-1.8.2.min", 
      //"jqx": "/Content/Plugins/jqWidgets", 
      "templates": 'templates', 
      "text": "commonRequireJsModules/text", 
      "domReady": "commonRequireJsModules/domReady", 
      "packages" : 'packages/' 
      //'signalR': './jquery.signalR-0.5.3.min', 
      //'knockout': './knockout-2.1.0', 
      //'pubsub' : './pubsub' 
     } 
     //,urlArgs: "bust=" + (new Date()).getTime() 
     //, 
     //shim : { 
     // 'jqx/jqxcore': ['jquery'], 
     // 'jqx/jqxsplitter': ['jquery', 'jqx/jqxcore'], 
     // 'signalR': ['jquery'], 
     // 'pubsub' : ['jquery'] 
     //} 
    }); 

Der Schrägstrich auf den Verpackungen path scheint das Problem angegangen zu haben, teilweise auch mit dem Entfernen des Namens im define-Teil des Moduls. So sieht es jetzt wie

define(['deps'],function(deps){ 
}); 

Statt

define('myMod',['deps'],function(deps){ 
}); 
1

Paar Dinge:

  • es seltsam scheint window.require stattdessen zu verwenden von erfordern nur
  • Namen in 'Shim' müssen Namen in 'Pfade' entsprechen, ist dies nicht der Fall, hier
  • document.ready kostenlos von erfordern getan wird, ist es nicht notwendig, wieder zu tun

Also: Haben Sie einen Ladefehler in Ihrer JS-Konsole? Sagt es ein Skript fehlt? Hier

ist eine funktionierende Konfiguration erfordern, Router ist im selben Ordner dieses Codes:

require.config({ 
    paths:{ 
     'jquery':'lib/jquery.min', 
     'backbone':'lib/backbone.min', 
     'underscore':'lib/underscore.min', 
     'router':'Router' 
    }, 
    shim:{ 
     'backbone':{ deps:['jquery', 'underscore'] }, 
     'router':{ deps:['backbone'] } 
    } 
}); 

require(['router', 'jquery', 'underscore', 'backbone'], 
    function (Router) { 
     var router = new Router(); 
     $('img').hide(); 
    }); 
}); 

und die index.html:

<html> 
<head> 
    <script data-main="assets/js/App.js" src="assets/js/lib/require.min.js"></script> 
</head> 
<body>...</body> 
</html> 
+0

Das ist das Seltsame das Skript von requireJS geladen ich die Last in Firebug sehen können, nur keinen Hinweis. jqx passt zum Shim, vielleicht habe ich das falsch verstanden. – RubbleFord