【发布时间】:2016-03-19 00:59:55
【问题描述】:
我正在努力让一个简单的单页应用程序工作。检查浏览器中的各种调试工具后,我可以看到它正确地触发了搜索并以正确的格式返回 JSON。但是,foreach 绑定似乎没有触发,并且该表永远不会填充。
相关的 HMTL:
<!-- Folders -->
<ul class="folders" data-bind="foreach: folders">
<li data-bind="text: $data,
css: { selected: $data == $root.chosenFolderId() },
click: $root.goToFolder"></li>
</ul>
<!-- Tickets grid -->
<table class="tickets" data-bind="with: chosenFolderData">
<thead><tr><th>ID</th><th>Description</th><th>Status</th></tr></thead>
<tbody>
<!-- ko foreach: tickets -->
<tr data-bind="click: $root.goToTickets">
<td data-bind="text: id()"></td>
<td data-bind="text: message()"></td>
<td data-bind="text: is_active()"></td>
</tr>
<!-- /ko -->
</tbody>
</table>
还有脚本:
function WebticketViewModel() {
// Data
var self = this;
self.folders = ['All', 'Open', 'Closed'];
self.chosenFolderId = ko.observable();
self.chosenFolderData = ko.observable();
self.chosenTicketData = ko.observable();
// Behaviours
self.goToFolder = function(folder) {
self.chosenFolderId(folder); // Mark folder as selected
self.chosenTicketData(null); // Stop showing a ticket
$.get('search.php', { folder: folder }, self.chosenFolderData); // Fetch folder data and update view
};
self.goToTickets = function(ticket) {
self.chosenFolderId(ticket.folder); // Mark ticket as selected
self.chosenFolderData(null); // Stop showing a folder
$.get('search.php', { ticketID: ticket.id }, self.chosenTicketData); // Fetch ticket data and update view
};
// Show inbox by default
self.goToFolder('All');
};
ko.applyBindings(new WebticketViewModel());
【问题讨论】:
标签: javascript json knockout.js