私は数日間これを解決しようとしてきましたが、うまくいきませんでした。私たちが運営するいくつかの e コマース サイトで古いフラッシュ ブランドのようなバナーを販売する代わりに、Javascript とモバイル フレンドリーなソリューションのために、私はこの要件に追いつくようにしています:
- ブランド リストと設定 (つまり、スライドごとの最大項目数) を AJAX 経由で取得します (完了)。
- ブートストラップ カルーセルを使用します (完了)。
- Knockout を使用した動的なカルーセル コンテンツのレンダリング
スライドごとにコンテンツを描画する方法が見つからないため、問題は後者にあります。私が達成しようとしているものの非動的レンダリング (ストレート html ベース) は、この SO の質問 (jsfiddle コンパニオンを使用) で確認できます。
スライドごとに複数のアイテムをレンダリングするために、KO foreach バインディングに問題があります。
次のコードに関するいくつかの洞察...
- Brands:ブランド構造のリスト。ブランドを表す観察不可能な構造 (名前、画像 URL など) を含む observableArray。
- $parent.isFirst(): スライドあたりのアイテムの最大量を指定して、新しいスライドを描画する必要があるかどうかを返します
- $parent.defineItemClass:スライドのクラスを返します (最初の 1 つだけが「アクティブなアイテム」としてマークされ、残りは「アイテム」のみです)
- $parent.drawTail:含まれている html を描画する必要があるかどうかを示します
テンプレート...
<script type="text/html" id="brand-widget-template">
<div class="container-fluid">
<div class="row-fluid">
<div class="carousel slide" id="brands-carousel">
<div class="carousel-inner" data-bind="foreach: brands">
<!-- ko if: $parent.isFirst() -->
<div data-bind="css: $parent.defineItemClass($index)">
<ul class="thumbnails">
<!-- /ko -->
<li class="span1">
<div class="caption">
<h5 data-bind="text: Name"></h5>
</div>
<div class="thumbnail">
<img src="#" alt="">
</div>
</li>
<!-- ko if: $parent.drawTail() -->
</ul>
</div>
<!-- /ko -->
</div>
</div>
</div>
</div>
レンダリングが行われる方法について誤解があるに違いありません。デバッグ中に、$parent.drawTail が呼び出されないことに気付きました。何か案は?
これは、プロジェクトから最も重要な部分を分離したフィドルです。
ありがとう!ルイージ