2012-12-02 12 views
10

Thông thường có sử dụng Marionette.ItemView cho các lớp xem không có thuộc tính cụ thể model được liên kết với chúng không?Sử dụng Marionette.ItemView cho chế độ xem không có mô hình?

Vì không phải sử dụng trực tiếp Marionette.View, có vẻ như ItemView có ý nghĩa như một lớp chế độ xem với các giá trị mặc định và ràng buộc thuận tiện.

Hoặc, bạn chỉ nên sử dụng Backbone.View? Nếu vậy, có cách nào để móc Backbone.View vào kiến ​​trúc thu thập và thu gom rác của Marionette không?

Cảm ơn bạn đã làm rõ!

Trả lời

18

ItemView có thể được sử dụng mà không cần mô hình. Tôi làm điều này khá thường xuyên.

Nếu bạn cần phải xác định dữ liệu cho một ItemView, nhưng không có dữ liệu trong một Backbone.Model, bạn cần phải ghi đè lên serializeData phương pháp:


MyView = Marionette.ItemView.extend({ 
    serializeData: function(){ 
    return { 
     my: "custom data" 
    }; 
    } 
}); 

cơ sở Marionette.View isnt' có nghĩa là được sử dụng trực tiếp bởi vì nó không cung cấp hàm render trên chính nó. Tuy nhiên, điều đó không có nghĩa là bạn không thể sử dụng nó để tạo ra các kiểu xem cơ bản của riêng bạn. Ví dụ: bạn có thể tạo loại chế độ xem cho ứng dụng của bạn có giao diện hiển thị bản đồ google hoặc tiện ích con của bên thứ ba hoặc một thứ khác không cần hiển thị dựa trên Backbone.Model chung mà ItemView có trong đó.

1

Tôi vừa phát hiện ra bạn có thể sử dụng một templateHelper cho điều này - chỉ chuck này trong tờ khai ItemView của bạn:

templateHelpers: function() { 
    return { 
     message: this.message, 
     cssClass: this.cssClass 
    } 
} 

Và sau đó trong mẫu của bạn:

<script type="text/html" id="notice-template"> 
    <span class="<%= cssClass %>"><%= message %></span> 
</script> 

Và sau đó khi bạn khởi tạo chế độ xem:

var noticeView = new App.Views.Notice(); 
noticeView.message = "HELLO"; 
App.noticeRegion.show(noticeView); 

Tôi sẽ quan tâm đến suy nghĩ của bạn về Derick này?