2012-06-28 204 views
1

我有兩種不同的方式在我的網站上顯示我的模型,我用不同的視圖處理它們。觸發從一個視圖到另一個視圖的事件

但是,我希望能夠以某種方式連接這些視圖,以便某個事件發生在某個特定模型的某個視圖上時,它也可以觸發另一個視圖上的事件。

爲了簡單起見,我們假設我有一個集合,並用兩個視圖表示集合,這兩個視圖會生成相同的ul列表。 (實際上,觀點當然不同)。

HTML

<ul class="view-a"> 
    <li class="subview-a">Model 1</li> 
    <li class="subview-a">Model 2</li> 
</ul> 

<ul class="view-b"> 
    <li class="subview-b">Model 1</li> 
    <li class="subview-b">Model 2</li> 
</ul> 

骨幹

viewA = Backbone.View.extend({ 
    tagName: 'ul', 
    className: 'view-a', 
}); 

viewB = Backbone.View.extend({ 
    tagName: 'ul', 
    className: 'view-b', 
}); 

subViewA = Backbone.View.extend({ 
    tagName: 'li', 
    className: 'subview-a', 
    events: { 
     'mouseover':'over', 
    }, 
    over: function() { 
     console.log('mouse over on A'); 
    } 
}); 

subViewB = Backbone.View.extend({ 
    tagName: 'li', 
    className: 'subview-b', 
    events: { 
     'mouseover':'over', 
    }, 
    over: function() { 
     console.log('mouse over on B'); 
    }, 
}); 

你可能會問:爲什麼不具有相同的子視圖?在這個例子中,這兩個子視圖都是li,但在實際實現中並沒有。

那麼如何在subview A上徘徊時觸發subview B上的鼠標懸停事件,反之亦然?

+1

如果在兩個視圖中都呈現相同的模型,也許你可以通過模型?可以在模型中註冊兩個視圖,並且當一個模型中發生事件時,使用'this.model.get('subview-b')''來訪問另一個視圖。 – jackwanders

+0

都是由相同骨幹模型代表的子視圖中的對應模型? – jakee

+0

是的!相應的型號 – AlexBrand

回答

2

與Backbone的事件模型進行通信。當我說這些時相信我,但是在使用Backbone時,請嘗試選擇模塊化方法。換言之,即使可能有關,每個觀點都不應該依賴於另一種觀點。它不僅使測試變得非常困難,而且也使其成爲調試和導致意大利麪代碼的噩夢。看看this article。它解釋了視圖如何使用Backbone的事件模型與對方進行通信。您應該熟悉PubSub模式。 This question也有關係。

更新!所以,如果我拿你的例子

var vent = _.extend({}, Backbone.Events); 

subViewA = Backbone.View.extend({ 
    tagName: 'li', 
    className: 'subview-a', 
    initialize: function() { 
     vent.on('my-event', this.over, this); 
    }, 
    events: { 
     'mouseover':'over', 
    }, 
    over: function(dataRecieved) { 
     console.log('mouse over on A'); 
    } 
}); 

subViewB = Backbone.View.extend({ 
    tagName: 'li', 
    className: 'subview-b', 
    events: { 
     'mouseover':'over', 
    }, 
    over: function() { 
     vent.trigger('my-event', "data you would like to pass"); 
    }, 
}); 
+0

這會綁定到集合的特定模型嗎?它看起來並不像它。我認爲這會導致所有子視圖運行「over」。我希望它是模型特定的 – AlexBrand

+0

我不確定你的子視圖意味着什麼運行結束?如果你正確處理你的觀點,你應該沒有綁定和'殭屍視圖'的問題。我的意思是,如果您希望它是特定於模型的,請將您的視圖綁定到模型更改,重置和所有事件。但是,導致另一個視圖對另一個視圖中的懸停/覆蓋事件做出反應,我沒有看到比上面列出的更好的方法。如果有我的耳朵。 – TYRONEMICHAEL

相關問題