2011-08-31 31 views
37

Tôi là người mới trong Backbone. Vì vậy, tôi đang cố gắng lấy dữ liệu từ dịch vụ REST.Backbone.js + Rest. Bộ sưu tập không được điền sau khi tìm nạp()

đây là mã đơn giản của tôi:

$(function() { 

    var Entity = Backbone.Model.extend({ 
     url: function() { 
      return 'http://localhost:8080/rest/entity/'+this.id; 
     } 
    }); 

    var EntityList = Backbone.Collection.extend({  
     model: Entity, 
     url: 'http://localhost:8080/rest/entity' 
    }); 

    var entityList = new EntityList(); 

    entityList.fetch(); 

}); 

dịch vụ của tôi trở về nghỉ ngơi JSON tiếp theo:

[{"id":1387, 
    "version":3, 
    "entityName":"entity01", 
    "entityLabel":"Entity01", 
    "entityPluralLabel":"Entity01", 
    "attributes": 
    [{"id":1425, 
     "slot":"D001", 
     "version":0, 
     "attributeName":"dfield", 
     "attributeType": 
      {"id":7, 
      "description":"Date", 
      "attributeType":"date", 
      "databaseType":"DATE" 
      }, 
     "options":[], 
     "order":2, 
     "attributeLabel":"dField", 
     "checked":null 
     }, 
     {"id":1424, 
     "slot":"S001", 
     "version":0, 
     "attributeName":"txfield", 
     "attributeType": 
      {"id":1, 
      "description":"Textbox", 
      "attributeType":"textbox", 
      "databaseType":"STRING" 
      }, 
     "options":[], 
     "order":1, 
     "attributeLabel":"txField", 
     "checked":null 
     } 
    ] 
}, 
{"id":1426, 
    "version":3, 
    "entityName":"entity02", 
    "entityLabel":"Entity02", 
    "entityPluralLabel":"Entity02", 
    "attributes": 
    [{"id":1464, 
     "slot":"D001", 
     "version":0, 
     "attributeName":"dfield", 
     "attributeType": 
      {"id":7, 
      "description":"Date", 
      "attributeType":"date", 
      "databaseType":"DATE" 
      }, 
     "options":[], 
     "order":2, 
     "attributeLabel":"dField", 
     "checked":null 
     } 
    ] 
} 
] 

Trong debugger tôi thấy yêu cầu đó đã được gửi đến dịch vụ REST và phản ứng đã nhận được, thế nào tôi có thể xem liệu bộ sưu tập entityList có được thu thập dữ liệu nhận được hay không? Trong thực thể debuggerList.models rỗng sau entityList.fetch();

Tôi đang đi đúng cách hay có vấn đề gì với mã của tôi?

+1

xương sống được khá đơn giản. Có lẽ nó giúp chỉ cần bước qua nguồn xương sống thực tế để xem những gì đang xảy ra. – Evert

Trả lời

83

Tôi nghĩ bạn đang đi đúng hướng. Nhưng vì Backbone.Collection.fetch() không đồng bộ, bạn nên kiểm tra giá trị entityList.models không đúng sau khi gọi phương thức, nhưng trong success gọi lại tìm nạp.

Đó là, mã này sẽ nói rằng mô hình danh sách rỗng:

entityList.fetch(); 
console.log(entityList.models); // => 0 (collection being fetched) 

trong khi mã này sẽ in số mô hình trong bộ sưu tập khi nó đã được dân cư: sourcecode

entityList.fetch({success: function(){ 
    console.log(entityList.models); // => 2 (collection have been populated) 
}}); 
+6

Ngoài ra, hãy xem xét quá tải hàm 'parse' trên bộ sưu tập. Nó sẽ cho phép bạn nhìn thấy phản ứng khi nó đến, và tôi thường thấy rằng tôi muốn làm nhiều hơn là chỉ cư các đối tượng tại thời điểm đó. – idbentley

+1

cảm ơn câu trả lời của bạn. bạn đã đúng về việc tìm nạp không đồng bộ, tôi thấy điều này đột ngột trong khi gỡ lỗi :) – Danyan

+0

Điều này giúp tôi tiết kiệm thời gian khắc phục sự cố. Tôi đã muốn sử dụng bộ sưu tập ngay sau khi tìm nạp, nhưng nó trống rỗng. Thêm trình xử lý thành công để tìm nạp bộ sưu tập để điền chính xác. Cảm ơn! – Hcabnettek

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