2

我正在構建Backbone/Marionette應用程序以列出不同的卡集。該佈局的左側包含一個ItemView,其中包含一個用於添加新集的輸入字段和一個右側的CompositeView來列出卡集。低耦合:將模型添加到不同視圖的集合

Cards.module("Set.SideBar", function(SideBar, App) { 
    SideBar.SideBarView = Backbone.Marionette.ItemView.extend({ 
     template: "#set-sideBar", 
     className: "well sidebar-nav", 
     ui: { 
      saveBtn: "a.saveSet", 
      setName: "input[type=text]" 
     }, 
     events: { 
      "click .saveSet": "saveSet" 
     }, 
     saveSet: function(ev) { 
      ev.preventDefault(); 

      var newSetName = this.ui.setName.val().trim(); 
      var newSet = new Cards.Entities.Set({ name: newSetName }); 

      newSet.save(); 

      // How to add the model to the collection? 
     } 
    }); 
}); 

我正在尋找的newSet添加到下面的CompositeView中收集的最佳方式。是否有任何干淨的低耦合解決方案來處理?我對backbone.js很陌生,無法想象這是完全不同尋常的,但不知何故,我無法在關於文檔的問題中找到答案 - 或者只是不理解它們。

Cards.module('Set.List', function(List, App) { 
    List.SetItemView = Backbone.Marionette.ItemView.extend({ 
     tagName: "tr", 
     template: "#set-list-item" 
    }); 

List.SetView = Backbone.Marionette.CompositeView.extend({ 
     tagName: "table", 
     className: "table table-bordered table-striped table-hover", 
     template: "#set-list", 
     itemView: List.SetItemView, 
     itemViewContainer: "tbody", 
     modelEvents: { 
      "change": "modelChanged" 
     }, 

     initialize: function() { 
      this.collection.fetch(); 
     } 
    }); 
}); 

在此先感謝您的幫助!

如何我現在這樣做:

感謝兩個答案,他們指導我在正確的方向。 collection.create提示也非常有用,並解決了我面臨的另一個問題!

一個Marionette.Controller裏面我做這樣的事,只是共享的集合引用:

var setLayout = new Cards.Set.Layout(); 
Cards.mainRegion.show(setLayout); 

var sets = new Cards.Entities.SetCollection(); 
var listView = new Cards.Set.List.SetView({ collection: sets }); 
setLayout.listRegion.show(listView); 

var sideBarView = new Cards.Set.SideBar.SideBarView({ collection: sets }); 
setLayout.sideBarRegion.show(sideBarView); 

和新的模式,簡單地通過collection.create代替.save()添加和。新增() 。

+0

爲什麼不與您的側邊欄視圖共享集合實例並使用Collection.add方法添加新模型? –

回答

1

要使視圖解耦,可以從其他視圖可以偵聽並處理h的視圖中引發事件無論他們喜歡。

+0

但它也可以發送一些自定義數據與事件? – d4n13l

+0

是的,無論你傳遞給trigger()的第二個參數都將作爲任何事件偵聽器的第一個參數傳遞 –

相關問題