2014-03-13 7 views
5

Ich benutze require.js mit Knockout auf einer Website und möchte das simpleGrid-Beispiel von diesem Link http://knockoutjs.com/examples/grid.html verwenden, aber ich kann kncokout.simpleGrid.3.0.js nicht mit einschließen Benötigen.Verwenden von knockout.simpleGrid.3.0.js mit Require.js

Ich habe versucht das Plugin mit

define(['jQuery', 'knockout'], // Require knockout 
    function($, ko) { 

    }); 

Einwickeln Das funktioniert nicht, es scheint das Problem auftritt, mit den Vorlagen.

Jede Hilfe willkommen

Antwort

0

In Ihrem erfordern config Sie einen Pfad zur simpleGrid Bibliothek erstellen sollten und verwenden Sie die Shim ihm zu sagen, dass es auf Knockout hängt, so dass Ihre Bibliotheken in der richtigen Reihenfolge geladen werden. Hier ein Beispiel:

var require = { 
    paths: { 
     'jquery': 'lib/vendor/jquery-2.0.3', 
     'ko': 'lib/vendor/knockout-3.0.0', 
     'koSimpleGrid': 'lib/vendor/knockout.simpleGrid.3.0' 
    }, 
    shim: { 
     'koSimpleGrid': { 
      deps: ['ko'] 
     }, 
    } 
}; 

Und dann könnte man die Ansicht Modell-Code aus dem Beispiel kopieren und einfügen innerhalb eines wie folgt definieren:

define(['jquery', 'ko', 'koSimpleGrid'], function ($, ko) { 
    // VIEW MODEL GOES HERE 
}); 
0

Ich stimme das Problem mit dem Code zu sein scheint, die schreibt die Rastervorlage Im Wesentlichen , da requirejs Module asynchron lädt, document.write() kann nicht verwendet werden - Schreiben des Dokuments hat abgeschlossen, wenn ein Modul ausgeführt wird. This StackOverflow answer explains it well Ich denke.

Ich habe rund um sie stattdessen erstellen und die erforderlichen Skript-Tag-Vorlagen anhängen mit dom Methoden:

templateEngine.addTemplate = function(templateName, templateMarkup) { 
    var scriptTag = document.createElement('script'); 
    scriptTag.type = 'text/html'; 
    scriptTag.id = templateName; 
    scriptTag.text = templateMarkup; 
    document.getElementsByTagName('body')[0].appendChild(scriptTag); 
}; 

My amd version is in this gist.