2012-06-25 9 views
17

Was ist die Standardmethode zum Laden Mapping-Plugin in require.js?Knockout.js Mapping-Plugin mit require.js

Unten ist mein config.js (require.js config-Datei)

require.config({ 
    // Initialize the application with the main application file. 
    deps: ["app"], 

    paths:{ 
     // JavaScript folders. 
     libs: "lib", 
     plugins: "lib/plugin", 
     templates: "../templates", 

     // Libraries. 
     jquery: "lib/jquery-1.7.2.min", 
     underscore: "lib/lodash", 
     text: 'text', 
     order: 'order', 
     knockout: "lib/knockout", 
     knockoutmapping: "lib/plugin/knockout-mapping" 

    }, 

    shim:{ 
     underscore:{ 
      exports: '_' 
     }, 

     knockout:{ 
      deps: ["jquery"], 
      exports: "knockout" 
     } 
    } 
} 

Meiner Ansicht nach Modell

define(['knockout', 'knockoutmapping'], function(ko, mapping) { 
} 

jedoch Zuordnung nicht zu ko.mapping gebunden ist. Irgendwelche Hinweise/Vorschläge würden geschätzt werden.

Danke, Ravi

Antwort

30

Wenn mit AMD verwendet, exportiert die Mapping-Plugin seine Funktionalität in ein separates Objekt. Also, die Funktionalität wird an Ihre Variable angehängt und Sie würden Methoden davon aufrufen (wie mapping.fromJS).

Sie könnten ko.mapping gleich mapping in Ihrem Code festlegen, wenn Sie Code haben, der auf ko.mapping beruht, den Sie nicht ändern können.

+0

+1 Dies ist der Weg, es zu tun – daedalus28

+0

Wie würde ich zuordnen, damit ich weiterhin ko.mapping verwenden kann? ty – David

+0

können Sie das Mapping-Objekt bei Bedarf an das Ko-Objekt anhängen. –

4

Nebenbei, da Sie Lo-Dash verwenden, müssen Sie "Unterstreichung" nicht in die RequireJS "Shim" -Optionen aufnehmen. Lo-Dash hat AMD Unterstützung gebacken in

7

Ihre Konfigurationsobjekt eine Reihe von Abhängigkeiten und einen Rückruf angeben können, wo eine weitere Abhängigkeit Konfiguration/Manipulation durchgeführt werden kann.

var require = { 
    paths: { 
    'knockout': '...', 
    'mapping': '...' 
    }, 

    // configuration dependencies 

    deps: ['knockout', 'mapping'], 

    // configuration callback 

    callback: function (ko, mapping) { 
    ko.mapping = mapping; 
    } 
}; 

Und wenn Sie Ihre Skripte in Markup enthalten config vor sollte geladen erfordern:

<script src="/scripts/config.js" /> 
<script src="/scripts/require.js" /> 

Nun Knockout.js mit einer ko.mapping Eigenschaft verfügbar sein wird, als wenn sie in einer Moduldefinition verwendet gewünscht.

define(['knockout'], function (ko) { 
    // ko.mapping is available 
}); 

Bitte beachten Sie, dass dies ein abgekürztes Konfigurationsbeispiel ist. Es gibt einige Shimming-Funktionen, die für das Mapping-Plugin benötigt werden, um die richtigen Exporte zu spezifizieren. Erinnere dich einfach nicht von Kopf an, was es ist.

+0

Ich renne in eine Race Condition wo require ([.. wird aufgerufen, bevor der Callback läuft. Ich mag es wirklich wie der Callback ko.mapping einrichtet, aber es funktioniert nicht für mich die ganze Zeit – Brandon