如果我对空阵列的空阵列([])采用加固式可观测阵列的功能,我就会发现内部阵列没有界定的错误。 只有在空阵作为参数建造的可观测的Array物体上才会发生这种情况。
这可能是一种ug,但也许/完全是,我只是失踪了。
以下例子与空阵线合著:
http://jsfiddle.net/adamtolley/4pZhR/32/“rel=”_http://jsfiddle.net/adamtolley/4pZhR/32/。
传真:
<ul data-bind="template: { name: outerTmpl , foreach: outerArray}"></ul>
Number of inner items: <span data-bind="text: innerCount"></span>
<hr />
<div data-bind="text: ko.toJSON(viewModel)"></div>
<script id="outerTmpl" type="text/html">
<li>
<span data-bind="text: name"></span>
<ul data-bind="template: { name: innerTmpl , foreach: innerArray}"></ul>
</li>
</script>
<script id="innerTmpl" type="text/html">
<li>
<span data-bind="text: name" />
</li>
</script>
The JS:
function outer(name, innerArray) {
return {
name: ko.observable(name),
innerArray: ko.observableArray(innerArray)
};
}
function inner(name) {
return {
name: ko.observable(name)
};
}
var viewModel = {
outerArray: ko.observableArray([
new outer("outer1", [new inner("inner1"), new inner("inner2")]),
new outer("outer2", [new inner("inner1"), new inner("inner2")]) //,
// new outer("outer3", []) //does not work with this line uncommented.
])
};
//use of innerArray().length vs innerArray.length seems to make no difference in error
viewModel.innerCount = ko.dependentObservable(function() {
return this.outerArray().reduce(function(i, j) {
return i.innerArray.length + j.innerArray.length;
});
}, viewModel);
ko.applyBindings(viewModel);