2009-12-21 3 views
0

Я повторяю набор данных json, которые содержат результаты нескольких таблиц базы данных. Среди других данных у меня есть таблица RateTable ... erm ... и таблица ресурсов. У RateTable есть имя ресурса ResourceId, которое ссылается на запись Resources.jquery copy json object

Итак, я выполняю итерацию через свой RateTable, и мне нужно ссылаться на мою запись ресурсов и использовать ее, скопировав ее в свою собственную переменную. Вот то, что я до сих пор:

if (data) 
    { 
     var rs = data.Resources; 

     $.each(data.RateTables, function(i,item){ 
      if (item.RateTableTypeId == 91) 
      { 
       var r = getresource(item.SupplierResourceId, rs) 
       if (r) 
        customer_options += '<option value="' + r.ResourceId + '">' + r.Name + '<\/option>'; 
      } 
      else if (item.RateTableTypeId == 92) 
      { 
       var r = getresource(item.CustomerResourceId, rs) 
       if (r) 
        supplier_options += '<option value="' + r.ResourceId + '">' + r.Name + '<\/option>'; 
      } 

     }); 

     $(".ddl-customer").html(customer_options); 
     $(".ddl-supplier").html(supplier_options); 
    } 

    function getresource(id, items) 
    { 
     $.each(items, function(i,item){ 
      if (item.ResourceId == id) 
       return $.extend(true, {}, item); 
     }); 
    } 

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

Извините, я не могу опубликовать некоторые данные json, это абсолютно огромно, поэтому мы оставляем ссылку на клиентскую сторону, чтобы сократить полезную нагрузку данных. Я надеюсь, что этого достаточно, чтобы помочь кому-то понять, что я пытаюсь сделать.

Lloyd

ответ

2

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

getresource не имеет оператора возврата. В анонимной функции используется оператор return. $ .each() вызов внутри getresource. Этот возвращаемый оператор возвращается из анонимной функции и обратно в $ .each(). $ .each() интерпретирует возвращаемое значение - если есть одно - как логическое значение, указывающее, следует ли продолжать итерацию. Но это значение никогда не возвращается обратно к getresource, у которого нет оператора возврата, чтобы его вернуть.

См. http://docs.jquery.com/Utilities/jQuery.each#objectcallback для получения более подробной информации о $ .each().

Одно из возможных исправлений заключается в использовании встроенного javascript для.

function getresource(id, items) { 
    for (var i = 0; i < items.length; ++i) { 
     var item = items[i]; 
     if (item.ResourceId == id) { 
      return $.extend(true, {}, item); 
     } 
    } 
} 

Другой вариант заключается в использовании держать $ .each() но вернуться из getresource, например,

function getresource(id, items) { 
    var r = null; 
    $.each(items, function(i, item){ 
     if (item.ResourceId == id) { 
      r = $.extend(true, {}, item); 
      return false; // end $.each() loop 
     } 
    }); 
    return r; 
} 
1

Я признаю, что я все еще учусь, и я никогда не видел, чтобы кто возвращает $.extend из функции ...

Орен прав насчет тебя не нужно возвращать ложь, если значение не найдено , поэтому я дам ему +1.

Кроме того, я попытался проверить свою функцию с помощью return $.extend(false, {}, items); и оказывается, что if (r) всегда будет верно, потому что r является объектом,

Я предполагаю, что вы пытаетесь вернуть две переменные из функции?Во всяком случае, лучший способ вернуть mutliple переменные из функции будет использовать что-то вроде этого:

function getresource(id, items) 
    { 
     $.each(items, function(i,item){ 
      if (item.ResourceId == id) 
       return [true, item]; 
     }); 
     return false; 
    } 

, то г [0] содержит логическое значение и г [1] содержит элемент (если это правда)