2013-02-27 72 views
0

有沒有辦法將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,所以我可以添加一個類到它。

我剛剛接近這個錯誤的方式嗎?任何輸入都會有幫助。謝謝!

回答

1

不知道這是否會有所幫助,但我傾向於在木偶中使用Vent。

var app = new Backbone.Marionette.Application(); 

然後我用listenTo(取代bindTo)事件,火災和火災時我觸發,

app.vent.trigger('App:openPageOne', { 'foo': 'bar'}); 

然後在發泄聽衆

app.vent.on('App:openPageOne', function(data) { 
} 

你的數據被髮送到數據參數:data.foo

您也可以在對象{'foo1':'bar1','foo2'內發送更多數據: 'bar2'}

我喜歡使用應用程序事件管理器。

+0

Kalpers:謝謝你的回覆。這種方法將起作用。的確,直接綁定到Vent是一種傳遞觸發時間數據的方法。然而,據我的理解,如果你直接綁定到通風口,你會在視圖被殺後觸發殭屍事件觸發風險(如果我錯了,請糾正我)。這就是爲什麼我試圖做View.bindTo(現在View.listenTo),但我想我們可以繞過這個問題,如果我們手動解除綁定?:/ Bah也許我不知道我在說什麼。 – Jupo 2013-03-26 05:39:01

+0

我還沒有看到用於發泄的ListenTo,但我有一個由Marionette解僱的onClose方法,我刪除了綁定。我真的很喜歡木偶。你真的必須調試代碼才能真正瞭解它在做什麼。當我遇到這些信息時,我會更新這條評論。感謝您提出這個問題。 – Kalpers 2013-03-26 11:36:36