2011-10-11 30 views
7

Trong hầu hết các ví dụ BackboneJS mà tôi đã thấy, chế độ xem cha mẹ gọi hàm render() trên chế độ xem con. Điều này có vẻ hơi lạ với tôi. Có lẽ nó hoàn toàn cho tối ưu hóa hoặc một cái gì đó, nhưng tôi không thấy lý do tại sao tối ưu hóa không thể diễn ra trong chính con xem. Không nên xem con có trách nhiệm gọi số render() của riêng nó? Nó có vẻ như trong tất cả các quan điểm của tôi, tôi kết thúc với một cái gì đó như:Cách thích hợp để gọi hàm render() trong BackboneJS

initialize: function() { 
    this.render(); 
} 

Ngoài ra, nếu nhìn mẹ tôi cập nhật tài sản model nhìn con, làm thế nào là con phải biết rằng mô hình thay đổi (và do đó render() nhu cầu được gọi là)? Tôi cho rằng trong trường hợp này, phụ huynh buộc phải gọi số render() của đứa trẻ. Mặc dù có phần suy ra, tại sao phụ huynh cần phải biết rằng đứa trẻ cần tái xuất hiện khi mô hình của nó bị thay đổi? Có vẻ như gọi hàm render của chế độ xem con nằm ngoài miền của chế độ xem của phụ huynh.

Trả lời

13

Giống như mọi thứ liên quan đến Backbone, đây là một câu hỏi khá chủ quan. Nhưng đây là một vài lý do khiến bạn muốn các bậc phụ huynh để render:

  • Đó là hoàn toàn hợp lý khi nghĩ rằng quan điểm cha mẹ có thể cần phải chắc chắn rằng những quan điểm trẻ được trả trước phần còn lại của đồ họa xảy ra. Ví dụ: cha mẹ có thể cần phải định kích thước phần tử vùng chứa dựa trên kích thước của các phần tử con hoặc chỉ hiển thị vùng chứa khi nội dung của nó được hiển thị bởi chế độ xem con.

  • Mẫu "hiển thị khi khởi tạo" chỉ hoạt động nếu bạn không cần thực hiện các việc khác trước - ví dụ: một mẫu chung là để chế độ xem liên kết với sự kiện change của mô hình, gọi this.model.fetch() và hiển thị gọi lại. Trong trường hợp này, đặc biệt là nếu bạn quan tâm đến thứ tự thực thi của các trình diễn khác nhau, thật tuyệt khi có một trình lắng nghe sự kiện đơn lẻ trên cha và sau đó có thỏa thuận cha mẹ với các kết xuất con, thay vì có các ràng buộc với mọi trẻ, không gọi số fetch().

  • Ngoài ra, khi phụ huynh hiển thị trẻ em không ngăn cản trẻ tự tái hiển thị, ví dụ: để đáp ứng với các sự kiện cụ thể hơn. Có cuộc gọi cha mẹ child.render() chỉ giúp đảm bảo rằng điều này đã xảy ra do thời gian cha mẹ kết thúc hiển thị.

Cũng cần lưu ý rằng chế độ xem có số không mặc định là render. Vì vậy, phụ huynh có thể gọi số render() về đứa trẻ mà không cần phải chắc chắn rằng nó sẽ làm bất cứ điều gì.

Để trả lời "điều gì sẽ xảy ra nếu cha mẹ thay đổi mô hình của trẻ?", Một tùy chọn là, đừng làm điều đó - luôn tạo một đứa trẻ mới cho mỗi mô hình mới. Nhưng điều đó có thể không phù hợp với kiến ​​trúc của bạn - trong trường hợp đó cha mẹ chịu trách nhiệm tái hiện lại đứa trẻ có ý nghĩa hoàn hảo.

+0

Cảm ơn bạn đã trả lời! Về dấu đầu dòng 1: Nếu con luôn tự hiển thị lại ngay sau init, các sự kiện mô hình, sự kiện DOM, v.v. thì luôn luôn sẵn sàng cho chế độ xem cha mẹ làm bất cứ điều gì nó muốn với nó, phải không? Đạn 2: Cá nhân tôi muốn mỗi đứa trẻ xem mô hình vì cha mẹ không nên biết rằng trẻ em quan tâm đến mô hình. Dấu đầu dòng 3: Xem phản hồi cho dấu đầu dòng 1. Tạo chế độ xem mới chỉ vì mô hình đang thay đổi có vẻ không hiệu quả. – Aaronius

+1

Vâng, như tôi đã nói, đó là chủ quan - Backbone không thực sự xác định một cách "đúng" để làm việc. Nhưng cá nhân, tôi thích cho rằng cha mẹ nhận thức và chịu trách nhiệm cho con cái ngay lập tức của họ. – nrabinowitz

+0

Ngoài ra, Bullet 3 - nó thực sự phụ thuộc vào ứng dụng.Ví dụ: bạn có thể lưu vào bộ nhớ cache chế độ xem trước đó để xem sau. – nrabinowitz

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