2013-05-05 19 views
6

Ở đây tôi muốn truy cập một biến hoặc một danh sách các biến được truyền khi initalizing một khung nhìn mới từ mẫu tương ứng của nó.Backbone.Marionette - Truy cập các biến trong mẫu ItemView hoặc mẫu CompositeView

Mã dụ

Tạo một danh sách xem

@Taskit.module "Tasks.List", (List, Taskit, Backbone, Marionette, $, _) -> 
    class List.NewTask extends Taskit.Views.ItemView 
     template: JST["backbone/taskit/tasks/tasks/list/_templates/new_task"] 

Template cho xem danh sách ở trên

<div id="new-task-form"> 
</div> 

Khởi tạo các ItemView

view = new Taskit.Tasks.List.NewTask 
    project_id: "project_id" 

Ở đây câu hỏi của tôi là ho Tôi có thể truy cập biến "project_id" từ mẫu của nó không.

<%= project_id %> #is not working 

Trong Backbone nó có thể đạt được bằng cách

$(@el).html(@template({task: @model, project_id: "project_id"})) 

làm thế nào để làm điều đó trong Marionette.js?

Trả lời

12

Bạn có thể cung cấp phương pháp của riêng bạn để serialize dữ liệu:

https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.itemview.md#itemview-serializedata

Backbone.Marionette.ItemView.extend({ 
    serializeData: function(){ 
    var data = this.model.toJSON(); 
    data.project_id = this.project_id; 

    return data; 
    } 
}); 
+4

Có thuộc tính templateHelpers hưởng quang cảnh rối mà có thể được sử dụng để truyền dữ liệu cho mẫu của nó. Để chuyển dữ liệu đến ItemView u có thể sử dụng thuộc tính itemViewOptions của collection/composite view – deven98602

+1

+1 cho 'templateHelpers''. Tài liệu: http://marionettejs.com/docs/marionette.view.html#viewtemplatehelpers – sthzg

+0

Phần mềm cốt lõi ở đây, bạn nên sử dụng 'templateHelpers' nếu bạn muốn dữ liệu bổ sung trong chế độ xem của mình. Sử dụng 'serializeData' nếu bạn cần chuyển đổi dữ liệu trong một mô hình hoặc tập hợp. –