Javascript 如何在一个敲除可观察数组中发布一个复杂的JSON对象?
我不太明白如何解决我目前的处境。我有一个表示“组织”的复杂javascript对象。在页面中,通过ajax get请求加载这些组织的列表,并将其推送到一个可观察的数组中,如下所示:Javascript 如何在一个敲除可观察数组中发布一个复杂的JSON对象?,javascript,jquery,ajax,arrays,knockout.js,Javascript,Jquery,Ajax,Arrays,Knockout.js,我不太明白如何解决我目前的处境。我有一个表示“组织”的复杂javascript对象。在页面中,通过ajax get请求加载这些组织的列表,并将其推送到一个可观察的数组中,如下所示: $.getJSON(apiBaseUrl + "?userId=" + userId, function (data) { $.each(data, function () { var dropdownOrg = new DropdownOrg(); var org = new
$.getJSON(apiBaseUrl + "?userId=" + userId, function (data) {
$.each(data, function () {
var dropdownOrg = new DropdownOrg();
var org = new Organization();
$.each(this, function (k, v) {
if (k === "UserGuid") {
org.userGuid = v;
}
if (k === "OrgId") {
dropdownOrg.orgId = v;
org.orgId = v;
}
if (k === "OrgName") {
dropdownOrg.name = v;
org.orgName = v;
}
if (k === "IsHiring") {
org.isHiring = v;
}
if (k === "Blurb") {
org.blurb = v;
}
if (k === "HqLocCity") {
org.hqLocCity = v;
}
if (k === "HqLocCountry") {
org.hqLocCountry = v;
}
if (k === "NumberOfEmployees") {
org.numberOfEmployees = v;
self.selectedEmployee(v);
}
if (k === "OrgImg") {
org.orgImg = v;
}
if (k === "Ownership") {
org.ownership = v;
self.selectedOwnership(v);
}
if (k === "Website") {
org.website = v;
}
});
self.orgDdl.push(dropdownOrg);
self.orgs.push(org);
});
});
self.orgdll是一个可观察的数组,它只保存足够的数据,因此我可以切换我在页面上查看的组织(可见性切换)。self.orgs是一个ko可观察数组,它保存了我需要通过ajax PUT保存的所有数据。组织对象如下所示(注意,它是丑陋的):
告诉过你,很难看,但我真的不知道如何让它更干净,而且它很好,现在已经足够好了。在当前情况下,我有3个组织被加载到orgs observable数组中。在每个organizations视图中,我将放置一个按钮(尚未完成,需要先弄清楚这一点),该按钮将获取当前可见的组织并发布它
我有一个PUT请求的shell,但我不确定如何从数组中获取当前查看的组织
self.updateOrganization = function () {
$.ajax({
type: "PUT",
contentType: "application/json; charset=utf-8",
url: apiBaseUrl + "?userId=" + userId,
data: ko.toJSON(?????),
dataType: "json",
success: function (msg) {
alert('success');
},
error: function (err) {
alert('Error updating information, please try again!');
}
});
有什么想法吗?明白了:
self.selectedOrgId.subscribe(function (currentOrgId) {
//alert(currentOrgId);
var org = ko.utils.arrayFirst(self.orgs(), function (item) {
if (currentOrgId == item.orgId) {
return item;
}
});
alert(ko.toJSON(org));
}, self);
因此,我可以订阅我的selectedOrgId,每当我更改下拉列表项时,它都会更新。然后我可以获取该id,使用ko.util.arrayFirst函数在我的可观察数组中找到具有该id的项
归功于:您可以在包含所有组织的数组中循环,找到与某个ID匹配的组织?然后在上面调用ko.toJSON()。嘿,我刚刚找到了这个:self.selectedOrg.subscribe(函数(newValue){alert(newValue);},self);我们应该做到这一点。如果我能让它工作,我会发布工作代码。你知道如何在这个对象上获取.indexOf()吗?我有orgId,需要从orgs数组中获取整个org对象。。
self.selectedOrgId.subscribe(function (currentOrgId) {
//alert(currentOrgId);
var org = ko.utils.arrayFirst(self.orgs(), function (item) {
if (currentOrgId == item.orgId) {
return item;
}
});
alert(ko.toJSON(org));
}, self);