Jquery templates 如何将foreach与特殊的第一个元素一起使用?
如果我有一个可观察的数组Jquery templates 如何将foreach与特殊的第一个元素一起使用?,jquery-templates,knockout.js,Jquery Templates,Knockout.js,如果我有一个可观察的数组 foos = [{ name: "a" }, { name: "b" }, { name: "c" }] 在我的viewmodel上,我希望渲染以下内容: 这里有特殊的东西 a b c 我和他关系很好 这里有特殊的东西 但结果是在a、b、c之后添加了。添加新的foo 有什么想法吗?在我的例子中,使用Knockoutforeach而不是jQuery模板的{{each}}是至关重要的,因为。由于目前没有一种方法可以告诉模板绑定在何处呈现模板,我现在看不到一种
foos = [{ name: "a" }, { name: "b" }, { name: "c" }]
在我的viewmodel上,我希望渲染以下内容:
- 这里有特殊的东西
- a
- b
- c
我和他关系很好
- 这里有特殊的东西
但结果是在a、b、c之后添加了。添加新的foo
有什么想法吗?在我的例子中,使用Knockout
foreach
而不是jQuery模板的{{each}}
是至关重要的,因为。由于目前没有一种方法可以告诉模板绑定在何处呈现模板,我现在看不到一种更干净的方法来完成这项工作,除了以下内容:
<ul data-bind="template: { name: 'foo-template', foreach: foos, templateOptions: { first: foos()[0]} }">
</ul>
<script id="foo-template" type="text/html">
{{if $item.first === $data}}
<li class="add-new-foo">Special stuff here</li>
{{/if}}
<li data-bind="text: name"></li>
</script>
{{如果$item.first===$data}
这里有特殊的东西
{{/if}
因此,我们将数组中的第一个项作为templateOptions传递,并检查我们在模板中处理的项是否确实是第一个
此处示例:
此外,templateOptions是在1.12ko之后添加的,所以您需要代码。有关templateOptions的更多信息
希望这能有所帮助。看来,在KO 1.3 2.0中,新的无容器控制流和
foreach
绑定将成为可能:
- 静态项
有关详细信息,请参阅本文:
你的代码
这是:
<ul>
<li>Static item</li>
<!-- ko foreach: products -->
<li data-bind="text: name"></li>
<!-- /ko -->
</ul>
- 静态项
在IE8中不起作用。我倾向于那种情况下的模板答案。还有其他想法吗
编辑:以下是IE8-knockout 2.2.1中的工作原理:根据以下注释的底部使用选项绑定:
看起来不错。特别是如果我使用模板组合将“真实模板”与代理模板分离。理论上,我认为最好的解决方案是添加一个
标记(或类似标记),这样该标记尤其会被替换为数据绑定的结果,而不是填充。然后,
可以包含一个和一个属性值,该属性值当前位于
上。也许我会尝试fork KO并在某个时候补充一下……一种方法是使用数组的sort函数。你可以定义你自己的排序函数,在这里你总是可以把特殊的东西放在最上面。我想建议把第一个项目添加到数组中,但看起来他的第一个项目是不同的动物,而不是他想和他的耳环混在一起的东西(任何对数组中的项进行操作的操作都必须知道此项是不同的,并且在返回服务器时必须将其过滤掉)。但可能对他有用。是的,第一项实际上不是视图模型的一部分,而是视图的一部分。这就是答案,因为问题是“如何使用没有元素的foreach”
<!-- ko if: $index() == 0 -->
your code
<!-- /ko -->
<ul>
<li>Static item</li>
<!-- ko foreach: products -->
<li data-bind="text: name"></li>
<!-- /ko -->
</ul>