在RP尼迈耶的文章Knockout.js性能缺陷#3 -所有绑定火一起,一种方法来建立一个下拉列表提供:
<select data-bind="value: selectedOption">
<!-- ko foreach: options -->
<option data-bind="attr: { value: id }, text: name"></option>
<!-- /ko -->
</select>
Run Code Online (Sandbox Code Playgroud)
这段代码也在文章的jsfiddle中.
http://jsfiddle.net/rniemeyer/QjVNX/
但是,当我使用这种在项目中构建选择的方法时,它工作正常,直到我在Internet Explorer 8中测试.IE8失败并且"无法解析绑定".
实际上,从IE8中的文章中运行小提琴也会导致错误.有没有办法使用knockout的foreach在IE8(我假设IE8或更少)中构建选择?
我有一个ul元素,通过模板绑定填充.
<script type="text/html" id="someTemplate">
<li>
<span data-bind="text: someText">
</li>
</script>
<ul data-bind="template: {foreach: someElemets, name: 'someTemplate'}">
</ul>
Run Code Online (Sandbox Code Playgroud)
但我希望第一个 li-tag不是来自模板的li-tag而是另一个带有按钮的li-tag,它不会连接到someElemets数组.如果我这样做的话
<ul data-bind="template: {foreach: someElemets, name: 'someTemplate'}">
<li><button data-bind=click: doSomething">Click me</button></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
然后li-tag with button将是渲染后的最后一个.解决这个问题的最佳方法是什么?
在淘汰模板绑定过程中,我需要检测我何时处理每一行中的第一个元素,因为它不应该有围绕它的锚标记.
给出以下js淘汰赛......
function Model() {
var self = this;
self.gridData = ko.observableArray('{"GridData":[["Category foo","0","0"],["Category bar","0","0"]]}');
}
var model = new Model();
ko.applyBindings(model);
Run Code Online (Sandbox Code Playgroud)
这个模板......
<script type="text/html" id="template">
<table>
<tbody data-bind="foreach: gridData">
<tr data-bind="foreach: $data">
<td><a href="" data-bind="text: $data"></a></td>
</tr>
</tbody>
</table>
</script>
Run Code Online (Sandbox Code Playgroud)
这个HTML ...
<div data-bind="template: { name: 'template' }"></div>
Run Code Online (Sandbox Code Playgroud)
如果我们正在处理第一个元素,那么'if'绑定是否可以以某种方式使用?
此外,我发现了这个SO帖子,但它并没有让我得到我想要的东西.
更新:
谢谢你的回答.使用每个提供的信息,我能够为我的情况找到一个很好的解决方案.我将模板更新到下面......
<script type="text/html" id="template">
<tbody data-bind="foreach: gridData">
<tr data-bind="foreach: $data">
<!-- ko if:($index()===0) -->
<td data-bind="text: $data"></td>
<!-- /ko -->
<!-- ko ifnot:($index()===0) -->
<td><a href="" data-bind="text: …Run Code Online (Sandbox Code Playgroud)