这是一个与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>
所以我试图在鼠标进入按钮时在弹出窗口中显示一些文本,并在鼠标离开时消失 - 但是鼠标悬停在
上我认为我没有正确的约束力,但如果有人能看到我的错误,那就太棒了。
答案 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');
},