2011-12-05 32 views
16

Tôi có một danh sách các mục và nhấp vào chúng sẽ mang đến cho người dùng chi tiết về nó (một chế độ xem khác). Trong router của tôi, tôi có một lộ trình cho việc này:tìm nạp trong mô hình xương sống với id

'details/:id' : 'details', 

Bây giờ, chi tiết chức năng tôi nên lấy đối tượng của tôi (tìm nạp sẽ kích hoạt render xem mới). Nhưng tôi nên làm gì để xương sống gắn mục id vào model.url? 2 cách tôi có bây giờ là:

Tạo url on the fly khi lấy:

this.realty_object.fetch({url: SITE_PATH + 'blah/blah/' + id}); 

Và một cái gì đó như thế này:

this.realty_object 
    .set({id : id}, {silent: true}) 
    .fetch(); 

Nhưng tôi có nghi ngờ rằng đó là giải pháp phù hợp. Làm thế nào nó nên được? Sự khác biệt giữa model.urlRoot và model.url() là gì.

Trả lời

34

Câu trả lời đúng là sử dụng tài sản của mô hình urlRoot. Nếu được thiết lập, id mô hình sẽ được nối vào url này trong khi tìm nạp. Vì vậy, nó có thể trông như thế này (đối tượng có tên gọi khác nhau từ những gì có trong bài viết đầu tiên của tôi, nhưng ý tưởng là như nhau - lấy mẫu đơn bằng id):

Group = Backbone.Model.extend({ 
    urlRoot: SITE_PATH + 'group/index', 
}); 

Và trong lộ trình:

this.group = new Group({id: id}); 
this.group.fetch(); 
+2

Đây là ok, trừ khi bạn muốn giữ nguyên thể hiện mô hình, nhưng chỉ cần di chuyển nó giữa các trạng thái trống và dân cư (ví dụ: người dùng đã đăng nhập/đăng xuất). Trong trường hợp đó, giải pháp tốt nhất tôi có thể tìm thấy là '.set' của OP của id với' silent: true'. – SimplGy

+0

Bạn cũng nên chuyển 'im lặng: true' thành băm tùy chọn của hàm tạo mô hình để tránh mô hình bị đánh dấu là bị bẩn khi tìm nạp: ' this.group = new Group ({id: id}, {silent: true}) ; ' – Burgi

0

hãy xem qua ở đây, nó giải thích rất rõ những gì một trong những giải pháp tốt hơn là để lấy mẫu đơn

bạn muốn sử dụng một chức năng để sắp xếp các url, như một thuộc tính mô hình. sử dụng .isNew() ít nhất đây là cách tôi đã làm nó trong một thời bây giờ, tôi tin rằng nó tốt hơn so với xây dựng một url trong lấy mỗi khi bạn cần một cái gì đó.

How do I fetch a single model in Backbone?

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