骨干和twitter-bootstrap popover

时间:2012-01-17 17:12:56

标签: backbone.js twitter-bootstrap

这是一个与Backbone not binding events to jQuery Popover非常相似的问题 - 但答案似乎不符合我的需要。

我希望将(twitter bootstrap)popover绑定到我的一个视图中,但不确定我应该怎么做?

events : {      
    "hover .info" : "showDetails",      
},
render : function(){        
    var content = this.template.tmpl(this.model.toJSON());
    $(this.el).html(content);       
    return this;
},
showDetails : function() {

    this.$(".info").popover({title: 'Hello', content: 'World'});    
    this.$(".info").popover('show');        
    console.log(this.model.get('description'));
},

我的模板看起来像

<script type="text/template" id="item-template">
  <div class="well listitem" style="padding: 14px 19px;">
    <div class="row show-grid" title="Irregular three column layout">
      <div class="span6">${heading}</div>
      <div class="span1">${price}</div>
      <div class="span1"><button class="btn info">Details</button></div>        
    </div>
  </div>
</script>

所以我试图在鼠标进入按钮时在弹出窗口中显示一些文本,并在鼠标离开时消失 - 但是鼠标悬停在

  1. 弹出窗口显示未定义为标题
  2. 鼠标移开时,它会保持原位。
  3. 我认为我没有正确的约束力,但如果有人能看到我的错误,那就太棒了。

1 个答案:

答案 0 :(得分:4)

问题是Jquery hover事件需要两个回调函数,一个用于mouseenter和一个mouseleave。在您的情况下,您只传递一个将调用mouseenter并打开弹出窗口的函数。来自jquery docs

  

调用$(selector).hover(handlerIn,handlerOut)是以下的简写:   $(selector).mouseenter(handlerIn).mouseleave(handlerOut);

因此,更改您的代码将解决您的第二个问题:

events : {      
    "mouseenter .info" : "showDetails", 
    "mouseleave .info" : "hideDetails"     
},
render : function(){        
    var content = this.template.tmpl(this.model.toJSON());
    $(this.el).html(content);       
    return this;
},
showDetails : function() {

    this.$(".info").popover({title: 'Hello', content: 'World'});    
    this.$(".info").popover('show');        
    console.log(this.model.get('description'));
},
hideDetails : function() {
    this.$(".info").popover('hide');   
},