2011-06-19 2 views
2

J'essaie d'utiliser knockout pour les modèles pour générer des modèles.Est-ce que knockout.js peut utiliser des modèles pour générer des modèles?

Le long des lignes de

Html:

<script id="searchField-template" type="text/html"> 
    <li data-bind="text: name"></li> 
</script> 

<script id="template-template" type="text/html"> 
    <ul data-bind="template: { name: 'searchField-template', foreach: ${name} }" ></ul> 
</script>  

JS:

var viewModel = { 
    Title: [{ 
     name: "Title1"}, 
    { 
     name: "Title2"}, 
    { 
     name: "Title3"}], 
    Manager: [{ 
     name: "Manager1"}, 
    { 
     name: "Manager2"}, 
    { 
     name: "Manager3"}], 

    Defn: [{ 
     name: "Title"}, 
    { 
     name: "Manager"}] 

}; 

ko.applyBindings(viewModel); 

échantillon runnable ici: http://jsfiddle.net/scottwww/yQZUE/2/

Il semble que le problème est la façon dont les accolades sont interprétés.

Des suggestions?

Répondre

0

utilisez la variable $data dans le modèle imbriqué.

http://jsfiddle.net/dwick/yQZUE/3/

+0

Le modèle interne ne reçoit pas appliqué - Je m'attendrais à Title1, Title2, .... –

+0

le modèle fonctionne bien. c'est le viewmodel qui est incorrect. qu'est-ce que tu essaies de faire ici? –

+1

Vous passez 'Defn' dans le gabarit externe et il imprime les deux noms 'Title' et 'Manager'. Ça fonctionne bien. Voulez-vous imprimer CHAQUE nom de chaque élément dans le modèle View? Cela nécessitera de changer un peu le viewModel. – neebz

2

Je ne sais pas c'est la bonne façon, mais une référence à l'aide vm.

http://jsfiddle.net/scottwww/vwP3w/1/

HTML:

<div data-bind="template: { name: 'template-template', foreach: Defn }"></div> 

<script id="searchField-template" type="text/html"> 
    <li data-bind="text: name"></li> 
</script> 

<script id="template-template" type="text/html"> 
    <ul data-bind="template: { name: 'searchField-template', foreach: vm[$data.name] }" ></ul> 
</script>  

JS:

var viewModel = { 
    Title: [{ 
     name: "Title1"}, 
    { 
     name: "Title2"}, 
    { 
     name: "Title3"}], 
    Manager: [{ 
     name: "Manager1"}, 
    { 
     name: "Manager2"}, 
    { 
     name: "Manager3"}], 

    Defn: [{ 
     name: "Title"}, 
    { 
     name: "Manager"}] 

}; 
window.vm = viewModel; 
ko.applyBindings(viewModel); 
Questions connexes