2012-11-19 2 views
5

Sto provando a costruire una piccola applicazione usando knockout, richiede, underscore.knockout con requirejs e underscore per ottenere il template esterno

ho la mia pagina di indice in cui io chiamo a richiedere e che punti a un main.js erano io continuo la mia config

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) { 

}); 

il resto del mio indice non ha corpo. così quando viene caricato chiama app.js

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

questo dovrebbe quindi chiamare appViewModel che funziona bene. Questo è dove ho un po 'confuso, come ho poi voglio caricare in un modello da appViewModel

così sto cercando di fare qualcosa di simile

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

     //call and load in template 

}); 

questo è dove ho un po' bloccato lo so in spina dorsale per esempio che io uso

template:_.template(homeViewTemplate) 

ma sono in realtà non è sicuro il modo migliore di caricamento di un modello in qui

ho guardato https://github.com/ifandelse/Knockout.js-External-Template-Engine ma questo non funziona molto bene con require e se lo usi senza bisogno e metto del testo in un file html e lo chiamo quando uso jQuery mobile non aggiunge le classi ecc.

Mi chiedevo se qualcuno potesse indicarmi la direzione giusta .. credo che sto davvero cercando di capire quale codice per mettere in qui

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

     //call and load in template 

}); 

da chiamare in homeviewtemplate.

grazie

risposta

2

io uso jQuery per inserire il modello HTML nella pagina e quindi applicare i miei attacchi Knockout.

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

Potreste anche essere interessato al mio articolo su WIP advanced knockout binding.

+0

Articolo molto interessante. Sarebbe fantastico se potessi inserire un esempio di codice su Github. – Dan

+0

Sto provando ad usarlo anche con jQueryMobile - quindi suppongo che dovrò sparare un evento quando un link è cambiato .. in backbone vorrei spegnere il routing e quindi usare il router backbone ... consiglieresti di fare una cosa simile qui perché ho bisogno di sapere quando caricare in un altro modello di pagine .. – Dan

+0

Sì. Questo è probabilmente il miglior piano. KnockoutJS non viene fornito con un router, ma non è difficile implementarne uno terzo. Non ho molta esperienza con jQuery mobile, ma dovrebbe funzionare. –