皆さんおはようございます。私はノックアウト.jsで少し遊んでいます.いくつかのドロップダウンでカスケードフィルタリングをしようとしています. 3つのテーブルがあるとしましょう。
グループ -> サブグループ -> セクター
グループが選択されると、サブグループのドロップダウンがフィルター処理され、サブグループのドロップダウンが選択されると、セクターがサブグループの値でフィルター処理されます。あなたは絵を手に入れます。
私はすでにこのコードを持っています。
HTML:
<div class="span3">
<label for="grupos">Grupo<i clasS="icon-search"></i></label>
<select class="span12" id="grupos" data-bind="value:grupo">
<option value="1" >A</option>
<option value="2" >B</option>
<option value="3" >C</option>
</select>
</div>
<div class="span3">
<label for="subgrupos">Subgrupo</label>
<!-- ko with: grupo -->
<select class="span12" id="subgrupos" data-bind='options:$parent.subgrupoData, optionsText: "description", optionsCaption: "Select...", optionsValue: "id", value: $parent.subgrupo'> </select>
<!-- /ko -->
</div>
<div class="span3">
<label for="secciones">Seccion</label>
<!-- ko with: subgrupo -->
<select class="span12" id="secciones" data-bind='options:$parent.seccionData, optionsText: "description", optionsCaption: "Select...", optionsValue: "id", value: $parent.seccion'>
</select>
<!-- /ko -->
</div>
そしてJS:
var Subgroup = function(_id, _description) { var self = this; self.id = _id; self.description = _description; };
var Section = function(_id, _description) {
var self = this;
self.id = _id;
self.description = _description;
};
var SearchModel = function() {
var self = this;
self.grupo = ko.observable();
self.subgrupo = ko.observable();
self.subgrupoData = ko.observableArray([]);
self.seccion = ko.observable();
self.seccionData = ko.observableArray([]);
self.grupo.subscribe(function() {
$.getJSON("/someurl", {'g':$('#grupos').val()}, function(data) {
var mappedSg = $.map(data, function(item) { return new Subgroup(item.id, item.description) });
self.subgrupoData(mappedSg);
});
self.seccion(undefined);
});
self.subgrupo.subscribe(function() {
if($('#subgrupos')){
$.getJSON("/anotherurl", {'sg':$('#subgrupos').val()}, function(data) {
var mappedSect = $.map(data, function(item) { return new Section(item.id, item.description) });
self.seccionData(mappedSect);
});
}else{
self.seccion(undefined);
}
});
};
ko.applyBindings(new SearchModel());
これで作業は完了しましたが、if ($('#subgrupos')) 検証を記述する必要があります。これは、最初のドロップダウンを変更すると 2 番目が変更され、3 番目が ID なしで検索されるためです。
私の質問は、「with」バインディングを使用した選択がDOMから削除されるのを回避する方法はありますか? 検証には、それを検証する「ノックアウト」方法がありますか?
前もって感謝します