2012-11-19 4 views
5

Próbuję zbudować małą aplikację przy użyciu nokautu, wymagać, podkreślenia.nokaut z requirejs i podkreśleniem, aby uzyskać zewnętrzne szablonowanie

Mam stronę indeksu gdzie zadzwonię w wymaganą ilość i to wskazuje na main.js były Trzymam 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) { 

}); 

reszta mojego indeksu nie ma ciała. więc gdy jest załadowany, wywołuje app.js

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

to powinno następnie wywołać appViewModel, który działa poprawnie. To gdzie ja się nieco zdezorientowany jak ja potem chce załadować w szablonie z appViewModel

więc staram się robić coś takiego

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

     //call and load in template 

}); 

To gdzie ja się trochę zatrzymany wiem w szkielet na przykład można używać

template:_.template(homeViewTemplate) 

ale ja naprawdę nie wiem, najlepszym sposobem ładowania szablonu tu

mam spojrzał na https://github.com/ifandelse/Knockout.js-External-Template-Engine ale to nie działa bardzo dobrze z wymaganiem i jeśli używasz go bez wymagania i po prostu wstaw trochę tekstu do pliku html i wywołaj to, gdy korzystam z jQuery mobile nie dodaje klas itp.

Zastanawiałem się, czy ktoś może wskazać mi właściwy kierunek .. Myślę, że jestem naprawdę starają się wypracować co kod, aby umieścić tu

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

     //call and load in template 

}); 

zadzwonić w homeviewtemplate.

dzięki

Odpowiedz

2

używam jQuery wstawić szablon HTML na stronę, a następnie zastosować moje powiązania pucharowej.

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

Możesz być także zainteresowany moim artykułem WIP o advanced knockout binding.

+0

Bardzo ciekawy artykuł. Byłoby wspaniale, gdyby można było umieścić przykład kodu na github. – Dan

+0

Próbuję użyć tego również z jQueryMobile - więc domyślam się, że będę musiał uruchomić zdarzenie, gdy łącze zostanie zmienione. W sieci szkieletowej wyłączę routing, a następnie użyję routera szkieletowego. Czy poleciłbyś podobna rzecz tutaj, ponieważ będę potrzebować wiedzieć kiedy załadować w innym szablonie stron .. – Dan

+0

Tak. To prawdopodobnie najlepszy plan. KnockoutJS nie jest dostarczany z routerem, ale nietrudno wdrożyć trzecią część pierwszą. Nie mam dużego doświadczenia z jQuery mobile, ale powinno działać. –