2012-07-29 70 views
3

我使用的骨干0.9.2的外层div的,我有一个使用Twitter的引导和看起来像这样一个胡子模板:无法摆脱Backbone.js的观点

<div class="modal hide something" id="something-modal"> 
... 
</div> 

我试图摆脱额外的<div>骨干增加,因为我希望视图为1到1作为我的模板。我的渲染功能看起来类似:

render: function(){ 

    var $content = $(this.template()), 
      existing_spots = $content.find('.spots-list'), 
      new_spot; 

     this.collection.each(function (spot) { 
      new_sweetspot = new SpotView({ model: spot }); 
      existing_spots.append(new_spot.render().el); 
     }); 

     $content.find("[rel=tooltip]").tooltip(); 
     this.setElementsBindings($content); 
     //this.$el.html($content).unwrap('div'); // didn't work! 
     this.$el.html($content); 
     console.log(this.$el); 
     return this; 
    } 

我知道,通过添加:

tagName: "div", 
className: "modal", 

我会摆脱它,但我想视图的元素的控制是模板,而不是JS代码。

this.SetElement将导致列表不被更新(它将为空),this.$el = $content;将不会工作。

+0

可能重复的[Backbone,不是“this.el”包装](http://stackoverflow.com/questions/11594961/backbone-not-this-el-wrapping) – 2012-07-29 15:42:38

+1

这是一个内容重复,但这帖子/标题对未来用户的搜索友好度更高 – 2012-07-29 16:14:47

回答

2

上周在SO上有一个很好的线索。

Backbone, not "this.el" wrapping

TL;医生可以使用setElement,但你真的需要知道什么时候事情发生骨干,以确保一切都正确接线。

+1

感谢您的支持,我放弃了之前的想法,并认为“使用一个额外div的WTF并不是什么大不了的事情!保持未来 – 2012-07-29 11:54:47

+0

谢谢。我在模板中有一个模式,我想要显示,我注意到为了让我显示正确的视图(需要时间,其他明智的我会有一个空的),我不得不做一些事情如:setInterval(function(){ view.show(); },1000); (在$(selector).append(view.render()。$ el)之后) 你知道如何避免这样做吗?谢谢 – user1271518 2012-07-29 14:32:39