2012-11-19 8 views
5

Ich versuche, eine kleine Anwendung mit Knockout, erfordern, Unterstreichung zu bauen.knockout mit requirejs und Unterstreichung, um externe Vorlagen zu erhalten

Ich habe meine Index-Seite, wo ich in rufen Sie benötigen und es verweist auf eine main.js waren i meine Config halten

require.config({ 

paths: { 
    jquery:  'vendor/jqm/jquery_1.7_min', 
    knockout: 'vendor/knockout/knockout-2.2.0', 
    underscore : 'vendor/underscore/underscore_amd', 
    text:  'vendor/require/text', 
    templates: '../templates' 
} 

}); 

define(['app'], function(app) { 

}); 

den Rest meines Index keinen Körper hat. also, wenn dies geladen ist ruft es app.js

define(['jquery','knockout', 'appViewModel'], 
function($, ko, appViewModel) 
{ 
    ko.applyBindings(new appViewModel()); 
}); 

das sollte dann AppViewModel aufrufen, die in Ordnung funktioniert. Dies ist, wo ich ein bisschen verwirrt, wie ich dann in einer Vorlage von appViewModel

laden wollen, so stecken Ich versuche, so etwas wie dieses

define(['jquery','knockout', 'text!templates/homeViewTemplate.html', 'jqm'], 
function($, ko, homeViewTemplate) { 

     //call and load in template 

}); 

dies zu tun, wo ich etwas bekomme ich kennen zum Beispiel Rückgrat I

template:_.template(homeViewTemplate) 

aber ich bin wirklich nicht sicher, der beste Weg, um eine Vorlage zu laden hier in

ich ausgesehen habe bei https://github.com/ifandelse/Knockout.js-External-Template-Engine verwenden könnte, aber diese funktioniert nicht sehr gut mit erfordern und wenn Sie es ohne erfordern und nur etwas Text in eine HTML-Datei und rufen Sie das, wenn ich jQuery mobile es nicht hinzufügen die Klassen etc.

Ich fragte mich, ob jemand mich in zeigen könnte die richtige Richtung .. ich glaube, ich wirklich zu arbeiten, ich versuche, was Code hier setzen in

define(['jquery','knockout', 'text!templates/homeViewTemplate.html', 'jqm'], 
function($, ko, homeViewTemplate) { 

     //call and load in template 

}); 

im homeviewtemplate zu nennen.

dank

Antwort

2

Ich benutze jQuery die Vorlage HTML-Code in die Seite eingefügt werden und dann meine Knockout-Bindungen gelten.

$('#selector').append(homeViewTemplate); 
ko.applyBindings(VIEWMODEL, $('#selector')[0]); 

Sie können sich auch über advanced knockout binding in meinem WIP Artikel interessiert sein.

+0

Sehr interessanter Artikel. Es wäre großartig, wenn Sie ein Codebeispiel auf github setzen könnten. – Dan

+0

Ich versuche, dies mit jQueryMobile auch zu verwenden - also ich denke, ich werde ein Ereignis auslösen müssen, wenn eine Verbindung geändert wird .. im Backbone würde ich das Routing ausschalten und dann den Backbone-Router verwenden .. würden Sie empfehlen, zu tun eine ähnliche Sache hier, denn ich werde wissen müssen, wann in anderen Seiten Vorlage laden .. – Dan

+0

Ja. Das ist wahrscheinlich der beste Plan. KnockoutJS kommt nicht mit einem Router, aber es ist nicht schwer, einen dritten Teil zu implementieren. Ich habe nicht viel Erfahrung mit jQuery Mobile, aber es sollte funktionieren. –

Verwandte Themen