チェックボックスとラジオボタンをきれいに見せるためにprettyCheckable jqueryプラグインを使用しています.data-bind = "checked:dateMode"を使用すると、プラグインが実際のチェックボックスを隠し、独自のオーバーライドhtmlをきれいにするため、機能しませんチェックボックス/ラジオをアップすると、ラジオまたはチェックボックスをチェックしてモデルの値を更新すると、ノックアウトjsライブラリが認識されません。prettyCheckable プラグインを使用しなくても自分のコードが正常に動作することはわかっているので、モデルやデータ バインディング コードがめちゃくちゃだとは言わないでください。これをテストしました。
https://github.com/arthurgouveia/prettyCheckable
これが私の部分ビューコードです。
<div id="DatesChooser" class="span5 pull-left">
<h4><i class="icon-calendar"></i>Dates</h4>
<input type="radio" name="Date" value="All" data-label="All Available" data-bind="checked: dateMode" /><br />
<input type="radio" name="Date" value="Range" data-label="Range" data-bind="checked: dateMode" />
<div data-bind="visible: dateMode() == 'Range'">
<input type="text" id="FromYear" placeholder="1970" /> to
<input type="text" id="ToYear" placeholder="2012" /><br />
<div id="Date-Slider" class="ui-slider ui-slider-horizontal ui-widget ui-widget-content ui-corner-all">
<div id="Date-Slider-Bar" class="ui-slider-range ui-widget-header" style="left: 0%; width: 100%;"></div>
<a class="ui-slider-handle ui-state-default ui-corner-all" href="#" style="left: 0%;"></a>
<a class="ui-slider-handle ui-state-default ui-corner-all" href="#" style="left: 100%;"></a>
</div>
</div>
</div>
ここに私のノックアウトモデルがあります:
function searchVm() {
var self = this;
self.dateMode = ko.observable("All");
self.startSearch = function () { alert(self.dateMode()); };
};
そして、次のように prettyCheckable のものを初期化します。
$('input:checkbox').prettyCheckable();
$('input:radio').prettyCheckable();
以下は、prettyCheckable プラグインによってコードが変更された後にレンダリングされるコードです。入力スタイルが 'display:none' であることに注意してください。
<div id="DatesChooser" class="span5 pull-left">
<div class="clearfix prettyradio labelright blue">
<input type="radio" data-bind="checked: dateMode" data-label="All Available" value="All" name="Date" style="display: none;" checked="checked">
<a class="checked" href="#"></a>
<label for="undefined">All Available</label>
</div>
<br>
<div class="clearfix prettyradio labelright blue">
<input type="radio" data-bind="checked: dateMode" data-label="Range" value="Range" name="Date" style="display: none;">
<a class="" href="#"></a>
<label for="undefined">Range</label>
</div>
<div data-bind="visible: dateMode() == 'Range'" style="display: none;">
<input id="FromYear" class="placeholder" type="text" placeholder="1970">
to
<input id="ToYear" class="placeholder" type="text" placeholder="2012">
<br>
<div id="Date-Slider" class="ui-slider ui-slider-horizontal ui-widget ui-widget-content ui-corner-all">
<div id="Date-Slider-Bar" class="ui-slider-range ui-widget-header" style="left: 0%; width: 100%;"></div>
<a class="ui-slider-handle ui-state-default ui-corner-all" style="left: 0%;" href="#"></a>
<a class="ui-slider-handle ui-state-default ui-corner-all" style="left: 100%;" href="#"></a>
<div class="ui-slider-range ui-widget-header" style="left: 0%; width: 100%;"></div>
</div>
</div>
</div>