Knockout-访问数组的长度“;绑定到“;来自模板内部
Knockout - Accessing length of array "bound to" from inside template
我有不同的对象/视图模型,它们包含相似的数据,但具有不同的属性。
把它想象成一个包含两个列表的对象;
- "某事"列表
- "组"列表
其中一个组还包含一个"Something"列表,类似于这个
function group(d) {
this.name = ko.observable(d.name)
this.anotherList = ko.observableArray(d.data);
}
function vm() {
this.list1 = ko.observableArray([1,2,3,4]);
this.list2 = ko.observableArray([new group({name:'a', data:[9,8,7,6]})]);
}
ko.applyBindings(new vm());
一个要求是我必须输出绑定数组的位置和长度。目前,它是通过重复每个列表元素的代码来完成的,如下所示:
<div>
<h3>Specific for each list</h3>
<hr />
<ul data-bind="foreach: list1">
<li>
<span data-bind="text: $data">Data</span> - Is number
<span data-bind="text: $index()+1">x</span> of
<span data-bind="text: $parent.list1().length">n</span>
</li>
</ul>
<br />
<h4>Inside group</h4>
<!-- ko foreach: list2 -->
<ol data-bind="foreach: anotherList">
<li>
<span data-bind="text: $data">Data</span> - Is number
<span data-bind="text: $index()+1">x</span> of
<span data-bind="text: $parent.anotherList().length">n</span>
</li>
</ol>
<!-- /ko -->
</div>
我想要实现的是使用相同的模板来呈现"底部"内容——列表。
<div>
<h3>Using a template</h3>
<hr />
<ul data-bind="template: { name: 'listElement', foreach: list1 }"></ul>
<br />
<h4>Inside group</h4>
<span data-bind="foreach: list2">
<ol data-bind="template: { name: 'listElement', foreach: anotherList }"></ol>
</span>
</div>
<script type="text/html" id="listElement">
<li>
<span data-bind="text: $data">Data</span> - Is number
<span data-bind="text: $index()+1">x</span> of <strong><span>n???</span></strong>
</li>
</script>
我看了绑定上下文等,但似乎找不到一个好的方法。也许我需要创建一个自定义绑定,将长度和数据一起公开?(希望不是)
Fiddle:http://jsfiddle.net/skattefuten/e6s2X/
不使用自定义绑定的一种方法是在模板中移动"foreach逻辑":
<script type="text/html" id="listElement">
<!-- ko foreach: $data -->
<li>
<span data-bind="text: $data">Data</span> - Is number
<span data-bind="text: $index()+1">x</span> of <strong>
<span data-bind="text: $parent.length"></span></strong>
</li>
<!-- /ko -->
</script>
然后,您可以使用$parent.length
来访问数组的长度。
在模板中,您需要传入具有data
属性的数组:
<div>
<h3>Using a template</h3>
<hr />
<ul data-bind="template: { name: 'listElement', data: list1 }"></ul>
<br />
<h4>Inside group</h4>
<span data-bind="foreach: list2">
<ol data-bind="template: { name: 'listElement', data: anotherList }">
</ol>
</span>
</div>
演示JSFiddle。
相关文章:
- JsViews复选框从内部循环绑定
- 敲除数据绑定=“;html:html,内部html点击事件不起作用
- 在不增加分析跳出率的情况下,绑定网页上的内部链接以动态加载
- Knockout-访问数组的长度“;绑定到“;来自模板内部
- 需要将内部函数绑定到元素的单击事件
- 如何将函数绑定到ShadowDOM内部的元素
- 在绑定到内部$http函数时运行无限摘要循环
- 将内部作用域变量绑定到外部“模板”
- Angular 指令内部 HTML 重新编译,动态创建绑定属性
- Angular 1.5:访问控制器内部的绑定控制器属性
- AngularJS - 在服务内部对数组进行排序,在控制器/视图中保留绑定
- 余烬每循环加倍.使用内部每个循环变量的值绑定到外部每个循环的变量中命名相同的属性
- AngularJS 2 - 内部属性数据绑定 - 异常:类型错误:无法读取未定义的属性
- 挖空 JS 内部和外部绑定
- 无法加载资源:服务器在绑定功能中以状态 500(内部服务器错误)进行响应
- 获取 HTML 元素的所有静态数据属性,而无需内部绑定数据
- 绑定到类外部按钮的公共属性与实例化对象时内部绑定的按钮的值不同
- Kendo Grid内部的jQuery.on()输入字段绑定不正确
- 如何在自定义元素的所有内部绑定就绪时获得事件
- 调试:获取函数内部绑定变量的内容