2013-03-21 16 views
5

Attualmente sto provando a propagare un modello di riga tabella <tr> in un tag <tbody>. Ecco un esempio:Durandal/Knockout Template Binding Not Inserting

HTML:

<table> 
    <tbody data-bind="template: { name : 'tableTemplate', foreach : tableRow }"> 
    </tbody> 
</table> 
<script type="text/html" id="tableTemplate"> 
    <tr> 
     <!-- First Name --> 
     <td data-bind="text: firstName"></td> 
     <!-- Last Name --> 
     <td data-bind="text: lastName"></td> 
    </tr>       
</script> 

DurandalJS:

define(function(require) { 
    var self = this; 
    self.app = require('durandal/app'); 

    return { 
     tableRow: ko.observableArray([ 
      { firstName: "DemoFirstName" , lastName: "ExampleLastName" }, 
      { firstName: "ExampleFirstName", lastName: "DemoLastName" } 
     ]); 

    //viewAttached and other non-applicable console log functions here 
    }; 
}); 

Tutto in HTML sarà correttamente i dati-bind fino a quando non colpisce il tavolo; tutti i data-binds in seguito diventano morti.

Sono piuttosto nuovo per Durandal e sto imparando mentre vado.

+0

Ci sono errori nella console javascript del browser? – nemesv

+0

puoi pubblicare il tuo codice completo. Quello che hai mostrato qui dovrebbe funzionare. Inoltre, perché stai applicando l'app a questo? basta creare una nuova variabile. –

+0

AGGIORNAMENTO: a causa di ciò che entrambi avete detto, ho iniziato a indagare attentamente in qualsiasi altro punto del codice che potrebbe causare problemi. C'era un vecchio collegamento dati da un autore precedente che si annidava vicino al fondo del DOM del modale causando un errore di console che il data-bind è morto/non va a niente (perché non l'ho notato prima? Ahimè , vivi e impari). Una volta che ho commentato, ho iniziato a ricevere un errore nella console dicendo "Impossibile trovare il modello con ID tableTemplate". Continuerò a indagare. – Arctic

risposta

2

potrebbe desiderare di provare questo invece di un approccio modello:

<table> 
    <tbody data-bind="foreach: tableRow"> 
    <tr> 
     <!-- First Name --> 
     <td data-bind="text: firstName"></td> 
     <!-- Last Name --> 
     <td data-bind="text: lastName"></td> 
    </tr>       
    </tbody> 
</table> 
+0

Non riesco a far funzionare il modello, ma la tua alternativa lo fa. Grazie! Ha dato il tuo post un meritato +1. Anche se, mi piacerebbe sapere perché l'approccio modello non funziona nel caso in cui ci sia una situazione in futuro in cui avrei davvero bisogno di usarlo. – Arctic

+0

Non sono sicuro, ma ho intenzione di indovinare che il markup del template che hai mostrato si trova in un modulo Durandal, e forse il binding 'template' non trova i modelli come potrebbe fare una semplice applicazione Knockout. Potresti provare questo in un campione Knockout senza Durandal da vedere. – 7zark7

+0

Sì, è in un modulo Durandal, e una buona parte della documentazione e degli esempi di Knockout funzionano solo con un viewModel KO di tipo straight-up semplificato. Sfortunatamente, Durandal non ha la stessa documentazione e ha posto domande per compiti comuni come questi. – Arctic

8

Ho incontrato lo stesso problema, e ho scavato la risposta del gruppo Google Durandal. Ho pubblicato i risultati qui sulla mia domanda. KO cannot find template with ID

Fondamentalmente non è possibile utilizzare ancora i modelli di knockout con nome/ID, non sono supportati. Il supporto potrebbe venire presto, secondo gli sviluppatori Durandal nel proprio gruppo di discussione. La soluzione alternativa è utilizzare la funzionalità di composizione inline o di Durandal.

+0

+1 a Kal_Torak per la pubblicazione di informazioni anche qui .. :) – mikekidder