2013-01-18 12 views
11

Có cách nào để lấy tham số vào mẫu xem tổng hợp marionette không? Tôi figured rằng bất cứ thông số tôi khởi tạo xem với sẽ có sẵn trong các mẫu, nhưng nó không có vẻ làm việc.Làm cách nào để chuyển tham số vào mẫu xem tổng hợp của xương sống marionette

Views.myView = Marionette.CompositeView.extend({ 
    template: '#myView', 
    otherstuff... 
}); 


var collection = new App.Collection(); 
App.main.show(new Views.myView({ 
    collection: collection, 
    isMine: true 
})); 

mẫu:

<%= isMine %> 

Và khi mẫu được trả lại isMine là undefined:

Trả lời

17

Bạn có thể sử dụng chức năng templateHelpers cho việc này. Ví dụ tôi có một Layout mà trên render điền vào các vùng khác nhau.

onRender: function() { 
      var contactInfo = this.model.get('contactInfo'); 

      this.contactInfoRegion.show(new ContactInfoView(
       { 
        model: contactInfo, 
        travelerNumber: this.travelerNumber, 
        numberOfTravelers: this.numberOfTravelers 
       } 
      )); 
} 

var ContactInfoView = Backbone.Marionette.ItemView.extend({ 
     model: ContactInfoModel, 
     template: Backbone.Marionette.TemplateCache.get(contactInfoTemplate), 
     templateHelpers:function(){ 

      return { 
       numberOfTravelers: this.options.numberOfTravelers, 
       travelerNumber: this.options.travelerNumber 
      } 
     } 
    }); 
+1

+1 Đây là phương pháp chính xác. Bạn cũng có thể chuyển đối tượng thẳng tới templateHelpers, chứ không phải là một hàm, nếu có ai đó tự hỏi :) –

+0

Mặc dù nếu bạn truyền vào một đối tượng, bạn sẽ không có quyền truy cập trực tiếp vào từ khóa "this". (Xin lỗi, nó sẽ không cho phép tôi chỉnh sửa bình luận của mình!) –

6

Got một số sự giúp đỡ từ brian-mann trong chatroom freenode con số này ra. Tôi đã chuyển giá trị cho chế độ xem, nhưng tôi cần gửi giá trị đó làm thuộc tính cho mẫu thực tế bằng cách ghi đè phương thức serializeData.

Tôi cũng thực hiện kiểm tra để đặt mặc định là đúng vì vậy tôi không phải chuyển giá trị nếu tôi không muốn.

Views.myView = Marionette.CompositeView.extend({ 
    template: '#myView', 
    serializeData: function() { 
     var viewData = {}; 
     viewData.isMine = this.options.isMine === undefined ? true : this.options.isMine; 
     return viewData; 
    }, 
    otherstuff... 
}); 
-2

Bạn có thể thiết lập các mô hình tài sản của quan điểm 'mô hình: {isMine: true}'