我所做的是为页面创建一个视图模型,并使用每次调用的值更新属性。我使用带有三个参数的 ko.mapping 插件来更新现有的可观察数组并使属性可观察。这些ko.mapping.fromJSON
调用将进入您的 AJAX 调用的成功函数中,您可以在其中获得结果,为了简单起见,我只是让它们单击处理程序。
http://jsfiddle.net/jgoemat/v9XTf/
var jsonLocations = '[{"name":"home"},{"name":"work"}]';
var jsonServers = '[{"name":"Mercury"},{"name":"Venus"}]';
var jsonTenants = '[{"name":"Betty"},{"name":"Frank"}]';
function ViewModel() {
var self = this;
self.locations = ko.observableArray();
self.servers = ko.observableArray();
self.tenants = ko.observableArray();
self.loadLocations = function() { ko.mapping.fromJSON(jsonLocations, {}, self.locations); };
self.loadServers = function() { ko.mapping.fromJSON(jsonServers, {}, self.servers); };
self.loadTenants = function() { ko.mapping.fromJSON(jsonTenants, {}, self.tenants); };
}
var my = { vm: new ViewModel() };
ko.applyBindings(my.vm);
编辑-更新小提琴
如果位置包含租户,您可以修改该位置的属性,ko 事件处理程序将当前模型传递给处理程序:
self.loadServers = function(location) {
ko.mapping.fromJSON(jsonServers, {}, location.Servers);
};
如果您使用 jQuery 绑定,则可以使用ko.dataFor(element)
从元素所在的上下文中获取模型:
$('.loadAll').live('click', function(e) {
var location = ko.dataFor(this);
// location can be used in success callback of ajax
ko.mapping.fromJSON(jsonServers, {}, location.Servers);
ko.mapping.fromJSON(jsonTenants, {}, location.Tenants);
});