2012-03-31 9 views
2

Ich habe ein Snippet, das Twitter Bootstrap Tooltip und popover im onload lädt, die wie folgt aus:KnockoutJS Vorlagen und Twitter Bootstrap/JQuery Tooltip nicht funktioniert

$('i[rel=tooltip]').tooltip({ 
    placement: "left" 
}); 

die mit statischen HTML funktioniert gut, bis ich KnockoutJS Templating hinzufügen (einige Code aus Platzgründen weggelassen):

<div class="row-fluid" data-bind="foreach: events.slice(paginationStart, paginationStop())"> 
    ... 
    <li> 
     <i class="icon-calendar" rel="tooltip" data-original-title="Date"></i> <span data-bind="text: start">event.date</span> 
    </li> 
    ... 
</div> 

Dann die Tooltips nicht angezeigt werden. Ich habe versucht sowohl mit anonymen und normalen KnockoutJS Vorlagen

Ich glaube, ich verstehe, was los ist: KnockoutJS Templating überschreibt Twitter Bootstrap-Initialisierung, da das Templating Onload nach dem Import von Twitter Bootstrap JS-Dateien ausgeführt wird. Aber ich weiß nicht, was ich dagegen tun soll. Ich habe versucht, das JQuery-Zeug nach ko.applyBindings zu bringen, aber das hat auch nicht funktioniert.

+1

Hmmm ... es scheint, dass ich nach der afterRender-Eigenschaft suchen könnte. Ich werde es versuchen. – Magnus

+0

posten Sie Ihre Ergebnisse/Lösung als eine Antwort und genehmigen Sie es, um die Frage zu schließen, auf diese Weise wird es mehr Menschen in der Zukunft helfen. –

Antwort

2

Ich fand es ziemlich schnell nach dem Schreiben dieser Frage, kann nicht glauben, dass ich es verpasst habe. Die Antwort ist, das Twitter Bootstrap Javascript Plugin/JQuery Zeug im AfterRender Callback von KnockoutJS tempating zu tun.

Beispiel: Ändern Sie das Attribut in data-bind="template: { foreach: data, afterRender: bootstrapDecorate }" und BootstrapDecorate eine aufrufbare Funktion in Ihrem KO-Modell sein, in dem Sie alle Initialisierungseinstellungen ausführen, die Sie zuvor in Ihrer body.onload-Funktion hatten.

+0

Erweitern Knockout ist ziemlich beeindruckend und einfach. –

+0

Je nach DoCo wird empfohlen, anstelle von afterRender eine benutzerdefinierte Bindung zu verwenden. Siehe Hinweis in Anmerkung 7 - http://knockoutjs.com/documentation/foreach-binding.html#note_5_postprocessing_or_animating_the_generated_dom_elements –

+0

Es könnte jetzt sein, aber haben Sie bemerkt, dass dieser Beitrag älter als ein Jahr ist? – Magnus