2012-04-04 28 views
13

Giả sử tôi có một thiết lập json như:Backbone.js Tìm nạp dữ liệu phức tạp hơn và sử dụng như một bộ sưu tập

{ 
    page:1, 
    items:[ 
    { 
     name: 'item1', 
     id:1 
    }, 
    { 
     name: 'item1', 
     id:2 
    }, 
    { 
     name: 'item1', 
     id:3 
    } 
    ] 
} 

Và một mô hình như vậy:

var Item = Backbone.Model.extend({ 
    defaults: {name: "No name"} 
}); 

var ItemCollection = Backbone.Collection.extend({ 
    model: Item, 
    url: '/some/ajax/url', 
}); 

Sau khi lấy json này, làm thế nào có thể Tôi ánh xạ các mục được đặt làm bộ sưu tập ItemCollection và thêm số trang làm thuộc tính cho bộ sưu tập?

Trả lời

26

Như @asawyer đã đề cập, bạn phải ghi đè phương thức phân tích cú pháp, nhưng bạn không cần thực sự khởi tạo từng mục, Backbone có thể làm điều đó cho bạn nếu bạn trả về mảng mục.

Xem tài liệu cho collection.parse

phân tích cú phápcollection.parse(response)

phân tích cú pháp được gọi bởi Backbone bất cứ khi nào mô hình một bộ sưu tập của được trả về bởi máy chủ, trong lấy. Hàm được truyền đối tượng phản hồi thô và phải trả về mảng thuộc tính mô hình để được thêm vào bộ sưu tập.

Mã của bạn có thể được viết như

var ItemCollection = Backbone.Collection.extend({ 
    model: Item, 
    url: '/some/ajax/url', 

    parse: function(data) { 
     this.page=data.page; 
     return data.items; 
    } 
}); 
+2

Bạn vừa cứu tôi giờ làm việc. > _ < – asawyer

2

Bạn cần phải ghi đè parse

Nó sẽ kết thúc tìm kiếm một cái gì đó như thế này:

class Item extends Backbone.Model 
    defaults: 
     name: "No name" 

class ItemCollection extends Backbone.Collection 
    model: Item 
    url: '/some/ajax/url' 
    parse: (data) -> 
     items = [] 
     _.each data, (item) -> 
      newItem = new Item 
       id: item.id 
       name: item.name 
      items.push newitem 
     items 

(Coffeescript, nhưng đủ dễ dàng để chuyển đổi sang javascript thẳng)

tùy chọn khác của bạn là plugin quan hệ được tìm thấy tại:

https://github.com/PaulUithol/Backbone-relational

Tôi chưa bao giờ sử dụng nó nhưng nó là nghĩa vụ phải làm công cụ lập bản đồ phân tích cú pháp cho bạn tôi nghĩ.

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