2

このちょっとしたjQueryに相当するノックアウトを見つけることができるかどうかを確認しようとしています:

http://jsfiddle.net/chriscoyier/BPhZe/76/

これは私がしなければならないことですが、すべてのアイテムが同じオブザーバブルにバインドされているため、明らかに機能しません。

html:

<form>
<div>
    <input type="checkbox" name="option-1" id="option-1" data-bind="checked: buttonEnabled"> <label for="option-1">Option 1</label>
</div>
<div>
    <input type="checkbox" name="option-2" id="option-2" data-bind="checked: buttonEnabled"> <label for="option-2">Option 2</label>
</div>
<div>
    <input type="checkbox" name="option-3" id="option-3" data-bind="checked: buttonEnabled"> <label for="option-3">Option 3</label>
</div>
<div>
    <input type="checkbox" name="option-4" id="option-4" data-bind="checked: buttonEnabled"> <label for="option-4">Option 4</label>
</div>
<div>
    <input type="checkbox" name="option-5" id="option-5" data-bind="checked: buttonEnabled"> <label for="option-5">Option 5</label>
</div>

<div>
    <input type="button" value="Do thing" data-bind="enable: buttonEnabled">
</div>
</form>

JavaScript:

var viewModel = {
    buttonEnabled: ko.observable(true)
};

ko.applyBindings(viewModel);

http://jsfiddle.net/dludlow/WdWEW/

4

1 に答える 1

6

はい。ここで更新された jsFiddle を参照してください: http://jsfiddle.net/WdWEW/4/

私はいくつかのことをしました。

  1. 各チェックボックスに一意のvalue属性を追加しました
  2. optionsチェックボックスを、observableArrayという名前のビューモデルの新しいプロパティにバインドしました
  3. プロパティの長さがゼロより大きい場合にbuttonEnabled返される計算プロパティに変更しました。trueoptions

これが更新されたビューモデルです。

var viewModel = function() {
    var self = this;
    this.options = ko.observableArray(),
    this.buttonEnabled = ko.computed(function() {
       return self.options().length > 0;
    });
};

ko.applyBindings(new viewModel());

更新されたビューは次のとおりです。

<form>
    <div>
        <input type="checkbox" name="option-1" id="option-1" value="1" data-bind="checked: options"> <label for="option-1">Option 1</label>
    </div>
    <div>
        <input type="checkbox" name="option-2" id="option-2" value="2" data-bind="checked: options"> <label for="option-2">Option 2</label>
    </div>
    <div>
        <input type="checkbox" name="option-3" id="option-3" value="3" data-bind="checked: options"> <label for="option-3">Option 3</label>
    </div>
    <div>
        <input type="checkbox" name="option-4" id="option-4" value="4" data-bind="checked: options"> <label for="option-4">Option 4</label>
    </div>
    <div>
        <input type="checkbox" name="option-5" id="option-5" value="5" data-bind="checked: options"> <label for="option-5">Option 5</label>
    </div>

    <div>
        <input type="button" value="Do thing" data-bind="enable: buttonEnabled">
    </div>
</form>​
于 2012-11-02T19:16:12.813 に答える