9

我正在尝试 Backbone.Marionette,我对为什么我的布局和 ItemViews 不断生成额外的 div 感到困惑。

顺便说一句,例如在咖啡中。

AppLayout = Backbone.Marionette.Layout.extend
  template: "#my-layout",

  regions:
    menu: "#menu",
    content: "#content"

MyMenuView = Backbone.Marionette.ItemView.extend
  template: '#project_wiz_nav_template'

MyContentView = Backbone.Marionette.ItemView.extend
  template: '#project_setup_template'

MyApp = new Backbone.Marionette.Application()

MyApp.addRegions
  mainRegion: '#project'

MyApp.addInitializer ->
  layout = new AppLayout()
  MyApp.mainRegion.show(layout)

  layout.menu.show(new MyMenuView())
  layout.content.show(new MyContentView())

MyApp.start()

这是 index.html 包含的内容:

<div id='project'></div>
<script type='text/template' id='project_wiz_nav_template'> <h2>HI</h2> </script>
<script type='text/template' id='project_setup_template'> <h2>WORLD</h2> </script>
<script id="my-layout" type="text/template">
  <h2>Hello!</h2>
  <div id="menu"></div>
  <div id="content"></div>
</script>

这是它产生的:

<div id="project">
  <div>
    <h2>Hello!</h2>
    <div id="menu">
      <div> 
        <h2>HI</h2> 
      </div>
    </div>
    <div id="content">
      <div> 
        <h2>WORLD</h2> 
      </div>
    </div>
  </div>
</div>

如您所见,它不断为视图和布局生成额外的 div。我试过添加el: '#menu'el: '#content'但无济于事。

4

3 回答 3

8

这不是因为木偶。Backbone 默认为你生成一个<div>类。tagName您可以通过属性设置标签。有关此问题的重复项,请参阅对问题的评论。

于 2012-06-25T12:44:07.683 回答
-1

一个 hacky 解决方法,但 jQuery 的最接近()实际上为我完成了这项工作。myView.el我没有直接使用返回的,而是使用$(myView.el).closest("div").html()- 正如我所说的那样,hacky,但作为一个短期修复它正在工作。
我正在修改本教程:http ://davidsulc.com/blog/2013/02/03/tutorial-nested-views-using-backbone-marionettes-compositeview/comment-page-1/#comment-3801 ,这需要嵌套模型并使用 Bootstrap 创建手风琴视图。我想对他的起点做同样的事情,只使用 jQueryUI 手风琴小部件,这就是我需要返回未包装视图的原因——因此使用最接近()进行过滤。
除了添加 jqueryUI 链接和更改返回的 HTML 之外,它运行良好:http://dartsleague.parentleafarm.com/superheroes/

于 2013-02-06T19:56:02.277 回答
-3

指定您的 el 属性。我认为这将解决它:

http://documentcloud.github.com/backbone/#View-el

于 2012-06-25T03:57:29.757 回答