有沒有辦法將bindData傳遞給Marionette的bindTo,類似於jQuery的綁定?木偶傳遞bindData與bindTo
我讀了jQuery的網站上,你可以做以下的傳遞bindData:
function myFunction(event){
console.log(event.data.foo); // output "bar"
};
$(".some-element").bind("click", {foo:"bar"}, myFunction);
我想這樣做的原因是因爲我結合多種功能於一個途徑。
第一個函數只是使用路由中的參數,沒什麼特別的。
第二功能需要被傳遞給它的自定義數據,這是在bindData用武之地。
控制器和路由器
var Controller = {
page1: function(itemId){
Vent.trigger('openPageOne', itemId);
}
};
var AppRouter = Marionette.AppRouter.extend({
controller: Controller,
appRoutes: {
"page1/:itemid" : "page1"
},
start: function() {
Backbone.history.start();
}
});
首先綁定
這工作很好地,並且在導航到該路線時,我會得到打印在控制檯上的itemId。
var MyLayout = Marionette.Layout.extend({
initialize: function(){
_.bindAll(this);
},
myFunction: function(itemId){
console.log(itemId);
}
});
var myLayout = new MyLayout();
myLayout.bindTo(Vent, "openPageOne", myLayout.myFunction);
第二個綁定
這是我失敗:(
我想自定義的數據對象傳遞給函數。
裏面anotherFunction,我想顯示foo的值。
var AnotherLayout = Marionette.Layout.extend({
initialize: function(){
_.bindAll(this);
},
anotherFunction: function(event){
// Here is where I want to use foo
console.log(event.data.foo);
}
});
var anotherLayout = new AnotherLayout();
anotherLayout.bindTo(Vent, "openPageOne", {foo:"bar"}, anotherLayout.anotherFunction);
更具體而言,第一功能應該改變我的網頁的內容。第二個功能應突出顯示項目我的導航菜單。我想發送給我的函數的自定義對象基本上是菜單項的元素ID,所以我可以添加一個類到它。
我剛剛接近這個錯誤的方式嗎?任何輸入都會有幫助。謝謝!
Kalpers:謝謝你的回覆。這種方法將起作用。的確,直接綁定到Vent是一種傳遞觸發時間數據的方法。然而,據我的理解,如果你直接綁定到通風口,你會在視圖被殺後觸發殭屍事件觸發風險(如果我錯了,請糾正我)。這就是爲什麼我試圖做View.bindTo(現在View.listenTo),但我想我們可以繞過這個問題,如果我們手動解除綁定?:/ Bah也許我不知道我在說什麼。 – Jupo 2013-03-26 05:39:01
我還沒有看到用於發泄的ListenTo,但我有一個由Marionette解僱的onClose方法,我刪除了綁定。我真的很喜歡木偶。你真的必須調試代碼才能真正瞭解它在做什麼。當我遇到這些信息時,我會更新這條評論。感謝您提出這個問題。 – Kalpers 2013-03-26 11:36:36