2011-10-31 36 views
7

Tôi muốn tự động nối dữ liệu nhận được qua url trong định dạng JSOn vào listview của tôi. Nhưng tôi không thể tìm ra cách nó hoạt động.Các yếu tố bổ sung động cho jQuery Mobile ListView

Các trang web di động lấy các đối tượng trong các định dạng sau:

[ 
    {"id":1, "start":"2011-10-29T13:15:00.000+10:00", "end":"2011-10-29T14:15:00.000+10:00", "title":"Meeting"} 
] 

Trong .html tôi có một listview và một chức năng, nơi mà tôi cố gắng thêm các dữ liệu nhận được. Tôi chỉ hiển thị cơ thể.

<body> 
     <div> 
      <ul id="listview"> 
       <script>$.getJSON("url", 
       function(data){ 
        $.each(data, function(i,data){ 
         i.title.appendTo("#listview"); 
        });});</script> 
      </ul> 
     </div> 
</body> 

Có lẽ nó rất dễ, nhưng tôi mới tham gia lập trình web và tôi không thể tìm ra cách tôi nên nối dữ liệu đã truy xuất.

Có ai vui lòng giúp tôi không?

Trả lời

20
//make AJAX call to url 
$.getJSON("url", function(data){ 

    //declare a variable with which to build our output (it's best to buffer output and only do one append at the end since DOM manipulation is CPU expensive) 
    var output = ''; 

    //iterate through the data (we could also get rid of the jQuery here by using `for (key in data) { 
    $.each(data, function(index, value){ 

     //add each value to the output buffer (we also have access to the other properties of this object: id, start, and end) 
     output += '<li>' + value.title + '</li>'; 
    }); 

    //now append the buffered output to the listview and either refresh the listview or create it (meaning have jQuery Mobile style the list) 
    $('#listview').append(output).listview('refresh');//or if the listview has yet to be initialized, use `.trigger('create');` instead of `.listview('refresh');` 
}); 

Đây là một jsfiddle của giải pháp trên (đó cũng là một ví dụ của việc sử dụng for(){} thay vì $.each()): http://jsfiddle.net/VqULm/

+0

Cảm ơn, nó đã làm việc cho tôi. –

+0

.listview ('refresh') là những gì tôi cần, cảm ơn – mintedsky

0

Tôi nghĩ rằng vấn đề bạn có thể gặp phải là JSON được trả về là một đối tượng được bao bọc trong một mảng. Để phân tích, bạn sẽ phải lặp qua mảng thứ nhất:

for(var x = 0; x < data.length; x++) { 
var i = data[ x ]; 
i.title.appendTo("#listview"); 
} 
+0

Tôi tin rằng đó là một vấn đề, nhưng Thật không may đã không giải quyết được mọi thứ. Nó phải có một vấn đề khác. Cảm ơn bạn anyway;) –

0

Hãy làm mới listview sau khi appeding hoặc loại bỏ. Trừ khi bạn làm mới không có gì có thể được nhìn thấy.

$('#listview').append(output).listview('refresh'); 
1

Tôi đang phụ thêm như this..Its làm việc cho phụ .. Nó có thể hữu ích cho bạn hoặc người khác :)

  $.each(data.values, function(key, value) { 

      $('#activity_contacts').append('<li id="activity_contacts" data-id="' + value.contact_id + '">' + value.display_name + '</li>'); 
      $("#activity_contacts").listview("refresh"); 


      }); 

toàn bộ autocomplete của tôi là như thế này:

function contactSearchForActivities (q) { 
    $.mobile.showPageLoadingMsg('Searching'); 
    $().crmAPI ('Contact','get', 
     {'version' :'3', 'activity_sort_name': q, 'return' : 'display_name' }, 
     { 
     ajaxURL: crmajaxURL, 
     success:function (data){ 
      if (data.count == 0) { 
      cmd = null; 
      } 
      else { 
      cmd = "refresh"; 
      $('#activity_contacts').show(); 
      $('#activity_contacts').empty(); 
      } 
      //console.log(data); 

      //loop to go through the values in order to display them in a li as a list 


      $.each(data.values, function(key, value) { 

      $('#activity_contacts').append('<li id="' + value.contact_id + '" title = "' + value.display_name +'">' + value.display_name + '</li>'); 

    }); 

    $("#activity_contacts li").click(function() { 

    $('#activity_sort_name').val(this.title); 
    $('#activity_hidden_id').val(this.id); 
      $("#activity_contacts").empty(); 
    }); 

      $.mobile.hidePageLoadingMsg(); 
      $('#activity_contacts').listview(cmd); 
     } 
     }); 
    } 
0

Nếu bạn đang cố gắng tạo lại một listview thì bạn cần phải .trigger (create) và .listview (refresh) danh sách. Vấn đề được giải thích tại http://liljosh.com/jquery-mobile-dynamicly-appending-to-listview-via-ajax-issue/

+0

Hi Josh! Vui lòng dành một chút thời gian để đọc qua [chính sách] về [khuyến mãi tự] (http://stackoverflow.com/help/behavior). Ngoài ra, có rất nhiều bài viết nói về cùng một vấn đề về meta. Đây là một trong số họ - http://meta.stackexchange.com/questions/57497/limits-for-self-promotion-in-answers – Lix

+0

Từ những gì tôi có thể thấy trong tiểu sử của bạn, bạn đã tự quảng bá ** khá nhiều**. – Lix

Các vấn đề liên quan