2016-04-26 12 views
0

Ich versuche, ein Widget in eine vorhandene Anwendung, die Knockout verwendet hinzufügen. Die Dokumentation für dieses Widget ist ziemlich spärlich. Die Dokumentation weist mich anknockout.js laden Widget aus JavaScript-Bibliothek

in meine Seite, wo ich das Widget angezeigt werden soll.

Dieses Projekt haml verwendet, und ich habe das Beispiel zum Laufen bringen kann die

%div 
    :javascript 
    Widget.insertWidget({"productId":"1234"}) 

Dies gibt das Beispiel funktioniert, indem Sie folgendermaßen vorgehen, aber ich brauche, dass productId haben, die eine Eigenschaft auf einem Knockout beobachtbar.

Also versuche ich, die Bindungen zu implementieren, und das ist, wo ich feststecke. Ich habe versucht, Variationen von

%div{ 'data-bind' => "(text|html|value) => $parent.widgetInserter" } 

Wo widgetInserter

ist
widgetInserter: => 
    Widget.insertWidget({"productId":@product().id}) 

Ich bin in der Lage eine debugger Aussage in meiner insertWidget Funktion zu treffen, aber das Widget nicht angezeigt wird.

Für mich scheint es, dass einer von denen hätte funktionieren sollen, aber keiner hat. Ich schätze jede Anleitung zu diesem Thema.

+0

:

<input type="hidden" data-bind="value: productId" id="pid" />

Dann später wieder darauf zugreifen '" (Text | html | Wert) => $ parent.widgetInserter "' - Warum verwenden Sie '=>' hier? Im Knockout müssen Sie ':' verwenden. Und hier nehme ich an, dass Sie eine benutzerdefinierte Bindung benötigen, um Ihre Funktion auszuführen. Siehe http://knockoutjs.com/documentation/custom-bindings.html –

Antwort

0

Wenn Sie nicht das gleiche Knockout View-Modell von den anderen <script> zugreifen können, bindet dann das ID-Produkt zu einem versteckten Eingang:

%div 
    :javascript 
    var productId = document.querySelector('#pid').value; 
    Widget.insertWidget({"productId": productId}) 
+0

Das ist eigentlich eine ziemlich clevere Idee. Ich habe schließlich einen Workaround gefunden, der auf den Interna des Widget-Objekts basiert, aber das wäre eine gute Lösung gewesen. Vielen Dank! –