1

次の例があります: http://jsfiddle.net/jLkxG/6/

is_checked プロパティには、Yes または No の 2 つの値を指定できます。値が yes の場合はチェックボックスをオンにする必要があり、保存されたリンクをクリックすると、チェックボックスがオンになっているかどうかに応じて、プロパティに yes または no が割り当てられる必要があります。

ノックアウトjsでこれをどのように行いますか?

4

2 に答える 2

3

最初の問題は、バインディングの角かっこを見逃したことです。

<input type="checkbox" value="Yes" data-bind="checked: is_checked() == 'Yes'"/>

これで、ロード時にチェックボックスが正しくチェックされます。

より大きな問題は、チェックボックスをクリックしても値が書き戻されないことです。is_checked()をboolに変更すると、正常に機能します。だからあなたが持っているなら:

 self.is_checked = ko.observable(true);

data-bind="checked: is_checked"

それは動作します。チェックボックスをオフにすると、is_checkedの値が更新されます。True/FalseではなくYes/Noであることが本当に重要な場合は、true/falseチェック状態をYes/Noに変換するためのコードを作成する必要があります。これについては、いくつかの方法があります。計算されたオブザーバブルを試してみます。ここを参照してください:http://jsfiddle.net/jLkxG/7/

于 2012-04-10T20:30:12.020 に答える
3

計算以外の別の方法は、「subscribe」を使用して値の変更をリッスンすることです。たとえば、is_checked にバインドし、その値を true または false にします。次に、そのオブザーバブルをサブスクライブし、必要に応じて別のプロパティを Yes/No に設定します。ここでフィドルを参照してください:http://jsfiddle.net/johnpapa/jLkxG/8/

HTML

<input type="checkbox" data-bind="checked: checkedvals.is_checked"/>
<label>Test</label><br/>

<pre data-bind="text:displayJS">
</pre>​

JavaScript

var viewModel = (function() {
    var self = this;
    self.checkedvals = {
        is_checked : ko.observable(true),
        is_checked_val : ko.observable("Yes")
    };
    self.checkedvals.is_checked.subscribe(function(){
        self.checkedvals.is_checked_val(self.checkedvals.is_checked() ? "Yes" : "No");
    });

    self.displayJS = ko.computed(function() {
        return JSON.stringify(ko.toJS(checkedvals), null, 2);
    });
})();
ko.applyBindings(viewModel);​
于 2012-04-11T01:22:09.043 に答える