0
比方說,例如,我們有父元素和相應的子元素。 所以,我有一個父類,並在JavaScript子類:淘汰賽,映射插件將子節點追加到父元素
//類來表示父
function parent(data) {
this.Id = ko.observable(data.Id);
this.Name = ko.observable(data.Name);
this.children = ko.observableArray([]);
}
//類代表一個孩子
function child(data) {
this.Id = ko.observable(data.Id);
this.Name = ko.observable(data.Name);
this.Age = ko.observable(data.Age);
this.ParentID = ko.observable(data.ParentID);
}
其實,我能夠通過做與每個父母相關的兒童附加
Jquery.getJSON("/api/parents", function (allData) {
var mappedParents = Jquery.map(allData, function (item) {
return new parent(item)
});
self.parents(mappedParents);
// Get Children and attach them to the corresponding parent
Jquery.getJSON("/api/children", function (allData) {
var mappedChildren = Jquery.map(allData, function (item) {
return new child(item)
});
self.children(mappedChildren);
ko.utils.arrayForEach(mappedChildren, function (dataChildren) {
var children_ParentID = dataChildren.ParentID();
ko.utils.arrayForEach(self.parents(), function (parent) {
if (parent.Id() == children_ParentID) {
parent.children.push(new child(dataChildren));
}
});
});
});
});
和I f最終得到一個Json,其中包含與每個父代相關的可觀察的兒童數組。
parent :
[
{
"Id": 1,
"Name": "Parent1",
"children": [
{"Id": 1, "Name": "Child11", "Age": "11", "ParentID": 1},
{"Id": 2, "Name": "Child12", "Age": "12", "ParentID": 1},
{"Id": 3, "Name": "Child13", "Age": "13", "ParentID": 1}
]
},
{
"Id": 2,
"Name": "Parent2",
"children": [
{"Id": 4, "Name": "Child11", "Age": "21", "ParentID": 2},
{"Id": 5, "Name": "Child12", "Age": "22", "ParentID": 2}
]
}
]
所以,你可以看到,我能夠通過一個嵌套循環
foreach parents
{
var idParent = Id;
foreach children
{
if chidren.parentId == idParent then attach children
}
}
兒童附加到給定父但是,我敢肯定,有可能是一個更好的辦法做到這一點,這是更有效的。例如,映射插件?或更好的東西?因爲如果數據量很大,可能需要一段時間才能將所有孩子拉到每個家長身上。
感謝您的答覆。我必須把** Jquery.getJSON(「/ api/children」,函數(allData){..} **裏面** Jquery.getJSON(「/ api/parent」,函數(allData){..} * *否則我的屏幕並不總是顯示父元素以及子元素,有時候它會,有時候不會!但是可能是,每次我想讓孩子與給定父代相關時,我必須查詢數據庫,而不是我將嘗試 – TonyStack
我假設這些api調用彼此獨立....反正,您何時實際獲取子數據實際上取決於基礎業務邏輯.................. – gkb
我強烈建議你使用maping插件,我用了很多年,並且幫了我很多。 –