2014-07-11 10 views
10

Sto provando ad usare il nuovo sistema di componenti in knockout 3.2.0.Knockout 3.2 componenti con modelli nominati?

Al momento non c'è molta documentazione, ma funziona.

ko.components.register('price-input', { 
    template: '<span>price-input</span>' 
}) 

Tuttavia il legame template consente di specificare un nome di modello già esistente nel DOM, come ad esempio:

<script type="text/html" id="price_input"> 
    <span>price-input</span> 
</script> 

allora si potrebbe fare questo:

<div data-bind="template: {name: 'price_input'}"></div> 
Così

I provato questo:

ko.components.register('price-input', { 
    template: {name: 'price_input'} 
}) 

ma non funziona. Esiste un modo per utilizzare modelli denominati con i nuovi componenti oppure devono essere incorporati o caricati con AMD.

Grazie

Edit: Dopo la risposta di RP Niemeyer, per chiarimenti qui è il modello ho cercato la sua risposta con:

<script type="text/html" id="ifx_price_input"> 
    <h4>PRICE INPUT <span data-bind="text: value"></span></h4> 
</script> 

Ecco il codice del componente:

ko.components.register('price-input', { 
    template: {element: 'ifx_price_input'} 
}) 

lo fa carica il modello, ma lo tratta come una stringa di escape.

Idee?

risposta

6

In v3.2.0 beta, questo caso non è stato gestito bene, quindi la hackery necessaria per InternalFX.

Questo sarà risolto in v3.2.0 finale. Funzionerà come ci si aspetta: è sufficiente fare riferimento a un elemento script, template o textarea e il contenuto logico verrà interpretato come nodi modello.

Nel caso in cui siete interessati, il commit che correzioni e le prove questo è qui: https://github.com/knockout/knockout/pull/1454

8

è possibile passare una proprietà element che è o un elemento stesso o una stringa che è il id dell'elemento come:

template: { element: 'myTmpl' } 
+0

Grazie per aver dedicato del tempo. Questo si avvicina ... Ma per favore guarda le modifiche. – InternalFX

+1

ooh, che in realtà sembra un insetto. –

+1

Non credo che lo stiamo gestendo correttamente. Discutendolo in questa discussione: https://github.com/knockout/knockout/issues/1418. Penso che dovremmo aggiustarlo ora. –

1

finalmente risolto questo con un po 'di aggiustamenti ... Spero che questo viene risposto meglio dagli sviluppatori a eliminazione diretta.

Questo funziona. Fondamentalmente mi basta caricare il testo del modello manualmente e passarlo alla funzione register. Quindi funziona come se fosse in linea.

ko.components.register('price-input', { 
    template: $('#ifx_price_input').html() 
})