2010-12-13 2 views
1

Aus irgendeinem Grund habe ich heute diesen riesigen Gehirn-Furz. >. <Was ist eine bessere Möglichkeit, dieses JSON in jQuery-Daten() umzuschreiben?

Ich habe ein JSON-Daten, die ich mit jQuery .data bin Befestigung(), die wie folgt aussieht:

$.getJSON("names.php", function(data) { 
    //generate html string and append to DOM 
    $.each(data, function(i,item) { 
     var strHtml; 
     strHtml += '<img src="' +item.PIC + '.jpg" id="' + item.ID + '" />'; 
    }) 
    $('body').html(strHtml); 

    //attach data to image ID 
    $.each(data, function(i,item) { 
     $('#' + item.ID).data(item.ID, { 
      NAME: item.NAME, 
      PHONE: item.PHONE, 
      EMAIL: item.EMAIL, 
      ADDRESS: item.ADDRESS, 
      ... 
      ... 
      ... 
     }); 
    } 
} 

Dies funktioniert gut; jedoch sieht es ein wenig hässlich, und ich versuche es ein wenig in erster Linie auf diesem Teil aufzuräumen:

$.each(data, function(i,item) { 
     $('#' + item.ID).data(item.ID, { 
      NAME: item.NAME, 
      PHONE: item.PHONE, 
      EMAIL: item.EMAIL, 
      ADDRESS: item.ADDRESS, 
      ... 
      ... 
      ... 
     }); 
    } 

ich ein Array von Objekt zu dem Schlüsselwert am addieren. Beispiel aus http://api.jquery.com/data/ $ ('body'). Data ('bar', {myType: 'test', count: 40});

Hier ist mein Versuch, es neu zu schreiben:

$.each(data, function(i,item) { 
    $('#' + item.ID).data(item.ID, function(){ 
     $.each(item) { 
      return i + ':' item[i]; 
     } 
    }) 
} 

Gibt es einen sauberen Weg, dies zu schreiben? Ich habe auch versucht, $ ('#' + item.ID) .data (item.ID, JSON.stringify (Daten));

Antwort

2

Wenn Sie nur den vollständigen Artikel hinzugefügt werden soll, mit all seinen Eigenschaften, können Sie dies nur tun:

$.each(data, function(i,item) { 
    $('#' + item.ID).data(item.ID, item); 
}); 

.data() nimmt einen beliebigen Wert, darunter ein Objekt, so dass Sie auch das Original verwenden könnten. Außerdem ist es wahrscheinlicher, dass Sie wollen, dass diese:

$.each(data, function(i, item) { 
    $('#' + item.ID).data("someKey", item); 
}); 

Dann können Sie eine konsistente .data("someKey") verwenden, um die Daten wieder aus als auch, anstatt als auch das Element der eigenen .id als Datenschlüssel.

+0

Das ist, was ich brauche .data (Schlüssel, obj) und ich war nur .data (Schlüssel, Wert) denken nur. – nolabel

+0

@nolabel - Sie sollten mit diesem Ansatz, viel einfacher auch eingestellt werden :) –

+0

Danke Nick! Jeder Schlüssel muss in meinem Fall eindeutig sein. B/c Ich muss die Daten in Bezug auf ihre ID aufrufen. – nolabel

1

Sie können einfach tun:

$('#' + item.ID).data(item.ID, item); 

Sie werden noch in der Lage sein, die Werte für den Zugriff auf als erwartet:

$('#' + someId).data(someId).NAME; 

By the way, JSON.stringify ist keine gute Idee, weil Um die Werte wieder zu lesen, müssen Sie sie zurück von einem String in ein Objekt konvertieren.

+0

Danke für den Tipp! Ich werde JSON.stringify im Hinblick auf die Notwendigkeit berücksichtigen, sie zurück zu konvertieren. – nolabel

1

Versuchen:

$('#' + item.ID).data("info", item);

Verwandte Themen