2013-04-22 91 views
2

我正在使用木偶渲染我的视图和模板。如何将变量传递给Marionette ItemView模板

除了将集合传递给我的视图外,我还需要在模板中显示其他自定义变量,例如'昵称'如下所示

我目前只将一个集合传递给我的'message_view'。我如何传入'昵称'的自定义变量?

//template JST["backbone/templates/messages/index"] 
.message_wrapper 
    .title 
    //NEED TO DISPLAY NICKNAME here 
    %h4 Chat with <%= nickname %> 
    %ul.messages 
    %li.message.load_more_messages 

的视图和控制器是设置如下:

List.Controller = 
    listMessages: (nickname) -> 
    messages = new Onethingaday.Collections.MessagesCollection() 
    messages.url = "/v1/messages/#{nickname}.json" 

    messages.remoteGet 
     success: (collection, response) => 
     //ONLY PASSING IN COLLECTION TO MESSAGE VIEW, NEED VARIABLE NICKNAME AS WELL 
     messages_view = new List.Messages 
      collection: collection 

     @layout.messagesRegion.show(messages_view) 

class List.Message extends Marionette.ItemView 
    template: JST["backbone/templates/messages/message"] 
    className: 'message' 
    tagName: 'li' 

class List.Messages extends Marionette.CompositeView 
    template: JST["backbone/templates/messages/index"] 
    itemView: List.Message 
    itemViewContainer: "ul.messages" 

回答

2

你可以让你的收藏url属性的功能和昵称映射到您的收藏与解析。

Onethingaday.Collections.MessagesCollection = Backbone.Collection.extend({ 
    initialize: function(){ 
    this._nickname = "a_sane_default"; 
    }, 
    setNickname : function(nickname) { 
    this._nickname = setValue; 
    } 
    url: function(){ 
    return "/v1/messages/" + this._nickname + ".json"; 
    }, 
    parse: function(res) { 
    var self = this; 
    return _.map(res, function(source) { 
     obj = _.clone(source); 
     obj.nickname = self._nickname; 
     return obj; 
    } 
    } 
}); 

(咖啡)

class Onethingaday.Collections.MessagesCollection extends Backbone.Collection 
    initialize: -> 
    @_nickName = "a_sane_default" 
    setNickname: (nickname) -> 
    @_nickName = nickname 
    url: -> 
    return "/v1/messages/#{@_nickname}.json" 
    parse: (res) -> 
    return res.map (source) => 
     obj = _.clone(source) 
     obj.nickname = @_nickname 
     return obj