晚上好。我試圖通過使用Ajax從服務器發送的數據動態地構建引導選項卡。在每個選項卡中都有來自另一個json源的某些元素。比方說:Knockout.js嵌套ObservableArrays在foreach按值過濾
Model A:
id
name
Model B:
id
name
fk_a
我觀察到的陣列需要從A的所有對象,並從B中的所有對象和我想要實現對B的內容從A型車的foreach當前元素篩選:
到目前爲止,我已經找到someways過濾可觀察到的數組,但我無法找到傳遞參數誰過濾陣列功能的方式。我可以設置一個
這裏的視圖模型
function Grupo(id, nombre){
var self = this;
self.id = id;
self.nombre = nombre;
};
function Subgrupo(id, nombre, grupo){
var self = this;
self.id = id;
self.nombre = nombre;
self.grupo = grupo
}
function MainConsultaViewModel() {
var self = this;
self.grupos = ko.observableArray();
self.subgrupos = ko.observableArray();
self.filtroSubgrupos = ko.observable();
this.subgruposPorGrupo = ko.computed(function() {
var filtro = this.filtroSubgrupos();
return ko.utils.arrayFilter(this.subgrupos(), function(filtro) {
return subgrupo.grupo == filtro;
});
}, this);
var cambiaFiltro = function(valor){
self.filtroSubgrupos(valor);
}
$.getJSON('some/url', function(data){
$.each(data.objects, function (i, val) {
self.grupos.push(new Grupo(val.id, val.nombre));
});
console.log(self.grupos());
});
$.getJSON('some/other/url'+self.tipo_consulta, function(data){
$.each(data.objects, function (i, val) {
self.subgrupos.push(new Subgrupo(val.id, val.nombre));
});
});
};
ko.applyBindings(new MainConsultaViewModel());
我缺少的是什麼?是否有可能實現這一目標?
乾杯
看一看[另一個例子(http://jsfiddle.net/origineil/J5QND/)更接近你的,包含兩個基於事件的過濾器的用途最初的實現(可觀察+計算)以及接受過濾條件的函數。 – Origineil
這看起來更接近,無論它的工作方式。你可以編輯你的答案並添加這個實現,我很樂意將它標記爲正確的。非常感謝你 – Cheluis