Javascript Foreach未正确更新视图
我正在努力让一个简单的单页应用程序正常工作。在检查了浏览器中的各种调试工具之后,我可以看到它正确地触发了搜索并以正确的格式返回了JSON。但是,Javascript Foreach未正确更新视图,javascript,json,knockout.js,Javascript,Json,Knockout.js,我正在努力让一个简单的单页应用程序正常工作。在检查了浏览器中的各种调试工具之后,我可以看到它正确地触发了搜索并以正确的格式返回了JSON。但是,foreach绑定似乎不会触发,并且该表永远不会填充 相关HMTL: IDDescriptionStatus 还有剧本: function WebticketViewModel() { // Data var self = this; self.folders = ['All', 'Open', 'Closed'];
foreach
绑定似乎不会触发,并且该表永远不会填充
相关HMTL:
IDDescriptionStatus
还有剧本:
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());
您使用可观察函数作为ajax调用的
success
回调。不要那样做。相反,使用适当的函数来处理结果。您已经在视图中期望了很多,因为票据
似乎具有可观察的属性
为票证创建构造函数,如下所示:
function Ticket(data) {
this.id = ko.observable(data.id);
this.message = ko.observable(data.message);
this.is_active = ko.observable(data.is_active);
}
并按照以下方式处理ajax调用:
$.get('search.php', { folder: folder }, function(data) {
self.chosenFolderData({
tickets: data.map(function(d) { return new Ticket(d); })
});
});
下面是一个完整的演示:
//假数据:
$ = {
get:函数(url、数据、回调){
如果(data.folder&&data.folder==“All”){callback([{id:1,message:“My message AAAA”,处于活动状态:true}}}}}}
else if(data.folder&&data.folder==“Open”){callback([{id:1,message:“我的message bbbbbb”处于活动状态:false},{id:1,message:“我的message CCCC”,处于活动状态:true}}}}
else回调([]);
}
};
功能票(数据){
this.id=ko.可观察(data.id);
this.message=ko.observable(data.message);
this.is_active=ko.可观察(data.is_active);
}
函数WebticketViewModel(){
//资料
var self=这个;
self.folders=[“全部”、“打开”、“关闭”];
self.chosenFolderId=ko.observable();
self.chosenFolderData=ko.observable();
self.chosenTicketData=ko.observable();
//行为
self.goToFolder=函数(文件夹){
self.chosenFolderId(文件夹);//将文件夹标记为选中
self.chosenTicketData(null);//停止显示票据
$.get('search.php',{folder:folder},函数(数据){
self.chosenFolderData({
票证:data.map(函数(d){返回新票证(d);})
});
});//获取文件夹数据并更新视图
};
self.goToTickets=函数(票证){
self.chosenFolderId(ticket.folder);//将ticket标记为选中状态
self.chosenFolderData(null);//停止显示文件夹
$.get('search.php',{ticketID:ticket.id},self.chosenTicketData);//获取票证数据并更新视图
};
//默认情况下显示收件箱
self.goToFolder('All');
};
应用绑定(新的WebticketViewModel())代码>
li:hover{cursor:pointer;color:red;}
IDDescriptionStatus
谢谢你的建议。我已经实现了您所做的更改,以及伪造的数据,页面功能正常。我仍然不确定如何删除假数据并让它引用我的真实JSON。解决了最后一步。无法正确猜测回调是JSON,因此必须在.get函数中显式声明。