几天来我一直在尝试解决这个问题,但无法使其正常工作。在我们运行的一些电子商务网站上替换旧的 Flash 品牌 - 我们销售类似横幅时,对于 Javascript 和移动友好的解决方案,我试图赶上这个要求:
- 通过 AJAX(完成)获取品牌列表和设置(即每张幻灯片的最大项目数)。
- 使用引导轮播(完成)。
- 动态轮播内容渲染,使用 Knockout
问题在于后者,因为我找不到在每张幻灯片上绘制内容的方法。在这个 SO question (with jsfiddle partner)中可以看到我想要实现的非动态渲染(基于直接 html ) 。
我在使用 KO foreach 绑定时遇到问题,以便在每张幻灯片上呈现多个项目。
关于以下代码的一些见解...
- 品牌:品牌结构列表。一个 observableArray,包含表示品牌的不可观察结构(名称、图像 URL 等)
- $parent.isFirst():如果必须绘制新幻灯片,则返回给定每张幻灯片的最大项目数
- $parent.defineItemClass:返回幻灯片的类(它只用'活动项目'标记第一个,其余的只是'项目'
- $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 永远不会被调用。有任何想法吗?
谢谢!路易吉