Zusätzliche divs in itemviews und layouts im Rückgrat.Marionette
Ich versuche aus Rückgrat.Marionette, und ich bin verwirrt, warum meine Layouts und ItemViews halten generieren zusätzliche divs.
Beispiel in Kaffee btw.
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()
Dies ist, was index.html enthält:
<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>
Dies ist, was es produziert:
<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>
Wie Sie sehen können, hält Sie generieren zusätzliche divs für die Ansichten und layouts. Ich habe versucht, indem el: '#menu'
und el: '#content'
ohne Erfolg.
- Wenn
el
oder (tagName
,id
,classname
) sind nicht für eine Sicht angegeben, ist er standardmäßig auf div-tag das ist der Grund. Könnte sein, #menu, #content kann nicht gefunden werden, auch - mögliche Duplikate von Backbone js: Wie zu entfernen extra-tag in Sicht?
- möglich, Duplikat der stackoverflow.com/questions/7096670/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist nicht, weil der Marionette. Rückgrat erzeugt eine
<div>
Klasse für Sie standardmäßig. Sie können die tag über dietagName
Attribut. Siehe Kommentare auf die Frage nach den Duplikaten dieser.open
Methode derRegion
- eine einzeilige Funktion, die macht$.append
der Ansichtel
Regionenel', so if remake in way that it will do
append(view.$el.html())` statt - es wird das problem lösen.onRender
trigger, in der Sie Ansichten zu tunthis.setElement(this.$el.find('selector'));
. Die einzige Sache ist, dass Sie wahrscheinlich benötigen, um erstellen Sie eine Basisklasse für Ihre ItemView oder/und LayoutView...Einen hacky workaround, aber jQuery nächsten() tatsächlich den job für mich. Anstatt über den zurückgegebenen
myView.el
direkt, ich bin mit$(myView.el).closest("div").html()
-- wie ich sagte, hacky, aber als Kurzfristige Lösung, es funktioniert.Ich war basteln mit diesem tutorial: http://davidsulc.com/blog/2013/02/03/tutorial-nested-views-using-backbone-marionettes-compositeview/comment-page-1/#comment-3801, die eine geschachtelte Modell und schafft ein Akkordeon-Ansicht mit Bootstrap. Ich wollte das gleiche tun mit seinem Ausgangspunkt, nur mit der jQueryUI accordion-widget, das ist der Grund, ich brauchte ein aufgeklappter Ansicht kommen zurück-daher auch der Filterung mit der nächsten().
Andere als die Zugabe der jqueryUI links und ändern Sie den zurückgegebenen HTML-Code, wie oben abgegrenzt, es funktioniert ziemlich gut: http://dartsleague.parentleafarm.com/superheroes/
Geben Sie Ihre el-Eigenschaft. Ich denke, dass es fix:
http://documentcloud.github.com/backbone/#View-el
Uncaught Error: HIERARCHY_REQUEST_ERR: DOM Exception 3
. Ich denke, das könnte mehr einer marionette, was in Bezug auf ItemView, aber ich bin mir nicht sicher...<tr>
tag in einem<ul>
tag, das ist nicht gültig.