2012-02-14 68 views
0

將事件綁定到Backbone boilerplate應用程序的最佳方式是什麼?在我的觀點中,我一直試圖將我的事件直接綁定到與我的視圖相關的模型上,但似乎並沒有奏效。我看到「namespace.js」中,有一個擴展,像這樣Backbone.Events APP鍵:Backbone樣板事件

// Keep active application instances namespaced under an app object. 
app: _.extend({}, Backbone.Events) 

我不完全瞭解如何使用它,我能夠......

讓事情在沒有樣板的情況下工作,但它確實提供了一些非常酷的功能,所以我很樂意能夠使用它。謝謝!

ADDED

我所用的代碼是用下劃線綁定方法,像這樣:

this.module.bind('change', this.render); 

但隨後,我意識到「this.model」被返回未定義,所以這並未」工作。我真的不確定樣板文件是如何讓我從視圖中引用我的模型的。

+0

你通過backbonejs事件文檔看? HTTP://documentcloud.github。com/backbone /#事件 – abraham 2012-02-14 03:54:21

+0

你能發佈你試過的代碼嗎? – 2012-02-14 05:12:31

+0

@abraham我看了一下事件文檔。樣板製作者已經在連接到DOMWindow的全局可用的名稱空間方法中擴展了'app'鍵。但我不明白這個全球可用的對象如何跟蹤我的模型視圖的特定更改。 – jordancooperman 2012-02-15 16:36:56

回答

2

我不知道這是否是您從您的代碼或只在此輸入一個錯字複製一個錯字,但我相信this.module(這是不確定的)應該this.model,您也必須確保傳中當實例,當然你的觀點,像這樣:

myView = new BBView({model: myModel});

那麼你可以說爲最新版本骨幹this.model.bind('change', this.render);this.model.on('change', this.render);

我經常結合自己的觀點,以CH以這種方式在我的模型上發生的憤怒事件。

至於擴展Backbone.Events,我用它的方式是創建一個獨立的「事件聚合器」,它可以幫助您在頁面上的不同視圖之間連接事件。比方說,例如,您對一個需要在另一個視圖上引發操作的視圖有一些操作。在這種情況下,您可以在實例化它們時將事件聚合器對象作爲選項傳遞給每個視圖,以便它們既可以觸發事件,也可以綁定到公共對象(即事件聚合器)上的事件。

whatsUp = _.extend({}, Backbone.Events) // the aggregator

myFirstView = new FirstBBView ({whatsUp: whatsUp});

(聚合器顯示爲this.options.whatsUp視圖內)

mySecondView = new SecondBBView2 ({whatsUp: whatsUp});

內部FirstBBView:

this.options.whatsUp.bind('specialEvent', function(arg1,arg2) { // do stuff });

內SecondBBView,當一些重要的事情發生了:

this.options.whatsUp.trigger('specialEvent', {arg1: 'some data', arg2: 'more data'});

對於一個偉大的說明,請參見this great article by Derick Bailey

+0

感謝您的迴應!這確實是問題,事件聚合是一個不錯的小紅利!好資源。 – jordancooperman 2012-02-17 03:05:39

相關問題