我正在構建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()添加和。新增() 。
爲什麼不與您的側邊欄視圖共享集合實例並使用Collection.add方法添加新模型? –