1

我目前正試圖僅在懸停元素上觸發Bootstrap彈出窗口。不幸的是,它觸發了頁面上的所有內容。下面是骨幹腳本(在CoffeeScript中):在所有元素上觸發的主幹事件偵聽器

Site.Views.Stories ||= {} 

class Site.Views.Stories.IndexView extends Backbone.View 
    template: JST["backbone/templates/stories/index"] 

    initialize:() -> 
    @options.stories.bind('reset', @addAll) 

    addAll:() => 
    @options.stories.each(@addOne) 

    addOne: (story) => 
    view = new Site.Views.Stories.StoryView({model : story}) 
    @$("#columns").append(view.render().el) 

    render: => 
    $(@el).html(@template(stories: @options.stories.toJSON())); 
    @addAll() 
    return this 

    events: => 
    "mouseover .rating" : this.showhover 

    showhover: => 
    this.$('.rating').popover('show'); 

回答

2

我猜,你有你的內部視圖的el所以這種多.rating元素:

this.$('.rating').popover('show'); 

擊中他們的所有。如果你只是想正在接收該事件的.rating然後說這樣通過抓住特定.rating從事件處理程序的事件的說法:

showhover: (ev) => 
    $(ev.currentTarget).popover('show') 

幾個其他的事情,而我在這裏:

  1. 骨幹不再自動設置@options,如果你想@options,那麼你必須用手工做的initialize

    initialize: (@options) -> ... 
    
  2. 你並不需要使用的功能爲您events,這將是罰款:

    events: 
        "mouseover .rating" : 'showhover' 
    
  3. 你不需要=>所有的方法。我認爲你不需要爲它們中的任何一個(假設你使用events對象而不是函數),但是你可以通過使用@listenTo或提供第三個參數到bind來解決這個問題。

相關問題