2013-11-05 47 views
0

我開始學習Marionette.View concept.for爲此,我創建了具有1個屬性的模型並指定了默認值。如何模擬Marionette.CompositeView中的事件工作

我在我的html文件中有下拉列表。每當它改變它觸發一個函數名稱myfunction。在myFunction我改變了模型屬性值。

每當屬性值自動變化時,它會觸發另一個函數。這個事件是我在Marionette.CompositeView裏寫的,但它不起作用。

此前我做了同樣的事情使用myModel.on那裏它工作正常。但它不工作modelEventsMarionette.CompositeView

讓我們檢查下面的代碼。

var mymodel=Backbone.Model.extend({ 
defaults:{ 
    "name":"oldValue" 
} 
}); 
var mymodelObj=new mymodel(); 
//marionette.View code 
var backView=Backbone.Marionette.CompositeView.extend({ 
events:{ 
    "change #pop1":"myFunction" 
}, 
myFunction:function(){ 
    mymodelObj.set({name:"updatedValue"}) 
}, 
modelEvents:{ 
    "change:name":"myFunction1" 
}, 
myFunction1:function(){ 
    alert("Hi"); 
} 
}); 
//creating instance 
var backViewObj=new backView({el:$("#sidebar")}); 

我該如何解決這個問題。

現在我正試圖瞭解Marionette.js在我的Backbone Applications中的用處。

回答

0

如果我沒有弄錯,模型不會附加到您創建的視圖。對於要觸發的modelEvents,CompositeView中應該有一個模型屬性。爲此,您應該在CompositeView的初始化過程中指定模型;

var backViewObj=new backView({el:$("#sidebar"), model : mymodelObj}); 
+0

如果我通過模型作爲參數傳遞給CompositeView中它的正常工作。我還有一個疑問。如果我觀察我的代碼,我手動編寫了我提到的模型實例名稱來設置屬性值。而不是我嘗試'this.set({name:「updatedValue」})'。它不工作。其實我正在嘗試的方法也是正確的,因爲單個視圖可能有更多的模型和集合。如果它是正確的我怎樣才能傳遞更多的模型實例。如果你不明白(我正在嘗試)讓我知道。 – user2873816

0

要做到這一點,雖然你需要通過創建backView像這樣當模型:

var backViewObj = new backView({ el:$("#sidebar"), model: myModel }); 

木偶通過覆蓋在它的構造delegateEventsBackbone.View電話和委託你modelEvents對象實現這一點型號:

Marionette.bindEntityEvents(this, this.model, Marionette.getOption(this, "modelEvents")); 

根據您的意見以上我認爲你是叔叔討論Backbone.Marionette提供的不同類型的視圖,因爲您正在詢問如何傳遞更多模型實例。當我開始使用木偶時我也不清楚。


Marionette.ItemView表示單個模型。

Marionette.CollectionView代表集合中的每個模型的集合並呈現Marionette.ItemView。它無法呈現模板。

Marionette.CompositeView代表模型和集合(葉子和樹結構中的分支)。這適用於遞歸數據結構,儘管您可以使用CompositeView來渲染模板(如表頭等),並使用itemViewContainer將itemViews放置在特定元素中。

如果你希望你的CompositeView中能夠呈現多個模型你需要的模型的集合傳遞到CompositeView中,而不是一個單一的模式: