使用巢狀迴圈
這是我們將要使用的 JSON 結構。
{
"employees": [
{
"firstName": "John",
"lastName": "Doe",
"skills": [
{
"name": "javascript",
"rating": 5
}
]
},
{
"firstName": "Anna",
"lastName": "Smith",
"skills": [
{
"name": "css",
"rating": 5
},
{
"name": "javascript",
"rating": 5
}
]
},
{
"firstName": "Peter",
"lastName": "Jones",
"skills": [
{
"name": "html",
"rating": 5
},
{
"name": "javascript",
"rating": 3
}
]
}
]
};
這個 json 結構可以分配給變數,也可以是任何 api 的響應。
正如我們在這個 JSON 中看到的那樣,有一個外部節點員工持有關於它們的資訊,並且有一個內部節點講述每個員工的技能。
所以在這裡我們將為每個使用 knockout foreach 建立一個巢狀。這是 html
<ul id="employee" data-bind="foreach: employee">
<li data-bind="text:firstName + ' ' + lastName">
</li>
<ul data-bind="foreach : skills">
<li data-bind="text: name">
</li>
<ul>
<li>
Rating : <!-- ko text: rating --><!-- /ko -->
</li>
</ul>
</ul>
</ul>
在上面的 html 中有兩個包含 foreach 迴圈的列表。外部迴圈將儲存作為員工的 json 結構的外部節點。內迴圈保持每個員工的技能。在每個迴圈內部,我們可以訪問相應節點的屬性。例如,我們可以訪問技能迴圈內的名稱和評級,而不是從外部訪問。
以下是 javascript 程式碼。
var employeeViewModel = function(){
var self = this;
self.employee = ko.observableArray(employees);//here we can assign json
}
var viewModel = new employeeViewModel();
ko.applyBindings(viewModel);
從 javascript 的角度來看程式碼不多。我們可以直接將我們的 json 分配給一個將由 Html 使用的 observablearray。