1

このシナリオで選択したチェックボックスを取得しようとしています。

<div id='main'>
    <table>
        <tbody data-bind="foreach: Years">
            <tr>
                <td>
                    <input type="checkbox" data.bind="checked: $root.SelectedYears"/>
                </td>
                <td><span data-bind="text: descr" />
                </td>
            </tr>
        </tbody>
    </table>
    <br>
    <input type="button" value="Click!" data-bind="click: count">
<div/>

function vm() {
    this.Years = 
    [
        {
            code: "2011",
            descr: "descr 2011"
        },
        {
            code: "2012",
            descr: "descr 2012"
        },
        {
            code: "2013",
            descr: "descr 2013"
        },
        {
            code: "2014",
            descr: "descr 2014"
        }
    ];

    this.SelectedYears = ko.observableArray(this.Years);

    count = function()
    {
        alert(this.SelectedYears.length);
    };

    return this;
}
ko.applyBindings(new vm());

http://jsfiddle.net/angelobadellino/UXKt9/

ボタンをクリックすると、SelectedYearsコレクションが空になります。代わりに、選択したチェックボックスを入力する必要があります。

私がどこが間違っているのか理解するのを手伝ってくれませんか?

4

2 に答える 2

2

SelectedYearsは、のいくつかのメソッドを公開している場合でも、それ自体は配列ko.observableArrayではありませんArray。しかし、length財産はありません。実際の配列を取得してサイズを取得するには、次を使用します。

alert(this.SelectedYears().length);

checkedただし、次のような配列ではバインディングを使用できないため、コードの残りの部分は意図したとおりに機能しない可能性があります。

data.bind="checked: $root.SelectedYears"

チェックされたものにはtrueまたはfalseと評価されるものが必要です。チェックボックスを配列にバインドするために、書き込み可能な計算されたobservableを検討することができます。SelectedYears

于 2013-02-19T12:48:47.290 に答える
1

試す:

alert(this.SelectedYears().length);

これはオブザーバブルなので、1 つとして呼び出す必要があります。

于 2013-02-19T12:47:35.510 に答える