使用 Knockout,当与observableArray
,您必须获取底层数组(myArray()
)以便读取长度。我不明白为什么myArray.length
不会返回底层数组的长度(而是返回 0)。这是一个错误还是有什么我只是错过的原因?
JSFiddle: http://jsfiddle.net/jsm11482/LJVWE/ http://jsfiddle.net/jsm11482/LJVWE/
JS/Model
var data = {
name: ko.observable("Test"),
items: ko.observableArray([
{ name: ko.observable("First Thing"), value: ko.observable(1) },
{ name: ko.observable("Second Thing"), value: ko.observable(2) },
{ name: ko.observable("Third Thing"), value: ko.observable(3) }
])
};
ko.applyBindings(data, document.getElementsByTagName("div")[0]);
HTML
<div>
<h1 data-bind="text: name"></h1>
<ul data-bind="foreach: items">
<li data-bind="text: value() + ': ' + name()"></li>
</ul>
<div>
<strong>data.items.length == </strong>
<!-- Expecting 3, get 0. -->
<span data-bind="text: items.length"></span>
</div>
<div>
<strong>data.items().length == </strong>
<!-- Expecting 3, get 3. -->
<span data-bind="text: items().length"></span>
</div>
</div>
这是因为平淡的items
observable 实际上是一个 Function,它有自己的length
属性来指示期望的参数数量。
From MDN 的函数页面(属性部分) https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function#Properties:
length https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/length
指定函数期望的参数数量。
作为一名使用 KnockoutJS 库的开发人员,我最初也会expectobservableArray 的长度是底层数组的长度,但我确实很欣赏 KO 库没有覆盖这个 Function 属性,因为这可能会导致其他不需要的副作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)