gpt4 book ai didi

javascript - 如何使用 marionette 嵌套布局 View ?

转载 作者:行者123 更新时间:2023-11-28 07:06:04 27 4
gpt4 key购买 nike

假设我有这个页面,我希望 subview 的内容正确插入到ParentLayoutView中。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>test marionette</title>
<script src="bower_components/jquery/dist/jquery.js"></script>
<script src="bower_components/underscore/underscore.js"></script>
<script src="bower_components/backbone/backbone.js"></script>
<script src="bower_components/backbone.wreqr/lib/backbone.wreqr.js"></script>
<script src="bower_components/marionette/lib/core/backbone.marionette.js"></script>
</head>
<body>
<div id="layout_container">
Parent content
<div id="child">initial content of child</div>
</div>
<script>

'use strict';

window.alert("Start the application!");

var App = new Backbone.Marionette.Application();

App.addRegions({
mainRegion: "#layout_container"
});

var ParentLayoutView = Marionette.LayoutView.extend({
template: '<div class="this is a parent template">Parent content after show()</div>',
regions: {
childRegion: {
el: "#child"
}
//childRegion: "#child" //BTW, this is does not work, it throws "#child not in DOM" error
},

onBeforeShow: function () {
this.showChildView('childRegion', new childView());
},
onShow: function () {
window.alert("Now child template is replaced by parent without attached child");
}
});

var childView = Marionette.ItemView.extend({
template: '<div class="this is a CHILD template">Child class content after show()</div>',
onShow: function () {
window.alert("We showed child view!");
}
});

App.on('start', function () {

var layout = new ParentLayoutView();
App.mainRegion.show(layout);
});

App.start();

</script>
</body>
</html>

但是我发现在 subview 被渲染并插入到 DOM 中之后(为什么?),ParentLayoutView 会完全替换它,所以我只能看到父内容。我希望在父级中看到子级内容,就像任何服务器端模板引擎所做的那样。我认为所有工作都必须在内存中虚拟完成,并且只有 #layout_container 处的一个根节点必须在进程结束时插入。因此,所有嵌套的 subview 都必须被渲染并相互附加,并且只有最父 View 必须插入到 DOM 中。我读过这个http://marionettejs.com/docs/v2.4.2/marionette.layoutview.html#efficient-nested-view-structures

最佳答案

当您在 mainRegion 中显示布局 View 时,您将替换该元素的当前内容。因此,您的 #child div 消失,并且 #layout_container 的内容变成 ParentLayoutView 模板中的内容。但该模板没有 #child 元素,因此该区域无效,并且没有地方放置 subview 。

相反,请确保 ParentLayoutView 的模板包含该元素的完整 HTML,包括 #child div。

关于javascript - 如何使用 marionette 嵌套布局 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31707755/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com