2014-07-11 3 views
10

Ich versuche, das neue Komponentensystem in Knockout 3.2.0 zu verwenden.Knockout 3.2 Komponenten mit benannten Vorlagen?

Es gibt nicht viel Dokumentation im Moment, aber das funktioniert.

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

jedoch die template Bindung ermöglicht es Ihnen, einen Vorlagennamen angeben, die bereits in dem DOM vorhanden ist, wie zum Beispiel:

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

Dann könnten Sie dies tun:

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

I So versuchte dies:

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

aber es funktioniert nicht. Gibt es eine Möglichkeit, benannte Vorlagen mit den neuen Komponenten zu verwenden, oder müssen sie inline oder mit AMD geladen sein?

Dank

Edit: Nach RP Niemeyer Antwort, hier zur Verdeutlichung ist die Vorlage ich mit seiner Antwort versucht:

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

Hier ist der Komponentencode:

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

Es tut Laden Sie die Vorlage, aber behandelt sie als eine Escapezeichenfolge.

Ideen?

Antwort

6

In v3.2.0 Beta wurde dieser Fall nicht gut behandelt, damit die hackery benötigt von InternalFX.

Dies wird in v3.2.0 endgültig behoben werden. Es funktioniert wie erwartet - verweisen Sie einfach auf ein script, template oder textarea Element, und seine logischen Inhalte werden als Vorlagenknoten interpretiert.

Falls Sie daran interessiert sind, die verpflichten, dass Korrekturen und Tests das hier ist: die Zeit https://github.com/knockout/knockout/pull/1454

8

Sie können eine element Eigenschaft übergeben, die entweder ein Element selbst oder eine Zeichenfolge, die die id des Elements wie ist:

template: { element: 'myTmpl' } 
+0

Vielen Dank für Ihre. Das kommt näher ... Aber sehen Sie sich bitte Änderungen an. – InternalFX

+1

Ooh, das sieht eigentlich wie ein Fehler aus. –

+1

Ich fühle nicht, dass wir das richtig behandeln. Diskutieren Sie es in diesem Thread: https://github.com/knockout/knockout/issues/1418. Ich denke, wir sollten es jetzt beheben. –

1

Schließlich dies mit einigen Hacks gelöst ... Ich hoffe, das besser beantwortet wird von den KO-Entwicklern.

Das funktioniert. Im Grunde lade ich einfach den Vorlagetext manuell und übergebe ihn an die register Funktion. Es funktioniert also so, als wäre es inline.

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