4

Knockout を使用して を操作する場合、長さを読み取るためにobservableArray基になる配列 ( ) を取得する必要があります。基になる配列の長さを返さないmyArray()理由がわかりません(代わりに 0 を返します)。myArray.lengthこれはバグですか、それとも単に見逃した理由がありますか?

JSFiddle: http://jsfiddle.net/jsm11482/LJVWE/

JS/モデル

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>
4

2 に答える 2

3

これは、ko.observableArray が実際には配列ではないためです。基になる配列を返す関数です。

あなたの例では、 items は関数であるため、.length = 0.

いくつかの追加プロパティでスパンを追加したこのフィドルを確認してください

http://jsfiddle.net/LJVWE/3/

于 2013-05-02T13:30:58.237 に答える