2014-01-18 2 views
-1

Не могу понять, как решить мою текущую ситуацию. У меня есть сложные объекты javascript, представляющие «организацию». На странице, список этих организаций погрузили с помощью запроса Ajax получить и заталкивает в наблюдаемый массив ко, например, так:Как сделать ajax Сообщение одного сложного объекта JSON в наблюдаемом массиве нокаута?

$.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.OrgDdl является наблюдаемой массив, который содержит только достаточно данных, так что я могу переключить какую организацию я просматриваю на странице (переключение видимости). self.orgs - это наблюдаемый ko массив, в котором хранятся все данные, которые мне нужно сохранить с помощью ajax PUT. Объект организации выглядит следующим образом (остерегайтесь, некрасиво):

function Organization(userGuid, 
orgId, 
orgName, 
orgImg, 
isHiring, 
blurb, 
numberOfEmployees, 
hqLocCity, 
hqLocCountry, 
website, 
ownership) 
{ 
var self = this; 
self.userGuid = userGuid; 
self.orgId = orgId; 
self.orgName = ko.observable(orgName); 
self.isHiring = ko.observable(isHiring); 
self.blurb = ko.observable(blurb); 
self.numberOfEmployees = ko.observable(numberOfEmployees); 
self.hsLocCity = ko.observable(hqLocCity); 
self.hsLocCountry = ko.observable(hqLocCountry); 
self.website = ko.observable(website); 
self.ownership = ko.observable(ownership); 
self.orgImg = ko.observable(orgImg); 
} 

рассказал вам, довольно некрасиво, но я не знаю, как сделать это чище, и это связывает хорошо, так что достаточно хорошо сейчас. В текущей ситуации у меня есть 3 организации, которые загружаются в наблюдаемый массив orgs. В каждом из представлений организаций я буду размещать кнопку (еще не сделали этого, нужно сначала разобраться в этом), которая займет видимую в данный момент организацию и опубликовать ее.

У меня есть оболочка запроса PUT, но я не уверен, как получить текущую организацию, которую я просматриваю из массива.

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!'); 
     } 
    }); 

Есть идеи?

+0

Вы могли бы перебрать массив, который содержит все организации и найти тот, который соответствует какой-ID? Затем вызовите ko.toJSON(). – arb

+0

эй я только что нашел это: self.selectedOrg.subscribe (function (newValue) { alert (newValue); }, self); должен сделать трюк. Я отправлю рабочий код, если я могу заставить его работать. – ledgeJumper

+0

любая идея, как получить .indexOf() на этом объекте? У меня есть orgId, нужно получить весь объект org из массива orgs. – ledgeJumper

ответ

0

Понял:

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.

Кредит: this guy

Смежные вопросы