2016-04-26 6 views
0

ノックアウトを使用する既存のアプリケーションにウィジェットを追加しようとしています。このウィジェットのドキュメントは非常にまばらです。私がウィジェットに表示させたいページに、knockout.js javascriptライブラリからウィジェットをロードする

<script>Widget.insertWidget({"productId":"1234"});</script> 

と書かれています。

このプロジェクトは、HAMLを使用していると私はやっによる作業例を得ることができました。これは、動作するように例を取得しますが、私はプロパティであることproductIdを、持っている必要があり

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

次ノックアウト観察で

私はバインディングを実装しようとしています、それは私が立ち往生している場所です。私は私が私のinsertWidget関数内debugger文を打つことができるんだけど、ウィジェットが表示されていないwidgetInserter

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

ある

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

のバリエーションを試してみました。

私には、それらのうちの1つがうまくいったはずだが、誰も持っていないようだ。私はこれに関するガイダンスを感謝します。

+0

''(text | html | value)=> $ parent.widgetInserter "' - なぜここで '=>'を使用していますか?ノックアウトでは ':'を使う必要があります。そしてここでは、あなたの関数を実行するためにカスタムバインディングが必要だと思います。 http://knockoutjs.com/documentation/custom-bindings.html –

答えて

0

あなたが他の<script>から同じノックアウトビューモデルにアクセスすることができない場合は、非表示の入力にプロダクトIDをバインド:

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

そして、後でそれをアクセス:

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

を参照してください。これは実際にはかなり賢い考えです。私は 'Widget'オブジェクトの内部構造に基づいた回避策を見つけ出しましたが、これは良い解決策でした。ありがとう! –

関連する問題