我遇到了一些与marionette.js有关的问题,并且花了几个小时来查看错误源但我找不到它,我的布局没有正确渲染其模板,它只是模板的第一个div内的渲染元素。
这是实际的模板,headerlayout.html:
<div class="header-logo-bg relative" id="header_logo">
<a href="/" title="Apps Title">
<div class="logo"></div>
</a>
</div>
<div id="home_btn">
<a href="/">
<div class="back_to_all_modules">
Back to<br>
All Modules
</div>
</a>
</div>
<div class="header_menu" id="header_menu">
</div>
但渲染结果只有这样:
<div>
<a href="/" title="Apps Title">
<div class="logo"></div>
</a>
这是我的Backbone布局:
define([
'marionette',
'modules/header/views/menulayout',
'tpl!modules/header/templates/headerlayout.html'
], function (Marionette, MenuLayout, layoutTemplate) {
var HeaderLayout = Backbone.Marionette.Layout.extend({
template: layoutTemplate,
regions: {
menuRegion: '#header_menu'
},
initialize: function () {
console.log('initializing header layout');
},
onRender: function () {
console.log('onRender headerlayout');
var menuLayout = new MenuLayout();
this.menuRegion.show(menuLayout);
}
});
return HeaderLayout;
});
这是我从主干应用程序调用的标题布局:
define([
'marionette',
'modules/header/views/headerlayout'
], function (Marionette, HeaderLayout) {
// set up the app instance
var myApp = new Backbone.Marionette.Application();
// configuration, setting up regions, etc ...
myApp.addRegions({
header: '#header',
content: '#content',
footer: '#footer',
dialog: '#dialog'
});
myApp.addInitializer(function () {
var headerLayout = new HeaderLayout();
myApp.header.show(headerLayout);
});
// export the app from this module
return myApp;
});
我在这里想念一下吗?任何帮助将不胜感激,谢谢。抱歉我的英语很差。
答案 0 :(得分:0)
在您的布局中,尝试将onRender
函数替换为onShow
。
答案 1 :(得分:0)
啊哈哈。
已经解决了。
Marionette期待一个模板对象,而不是文本模板。因为什么原因你给它一块文字而不是一个对象。是的你的代码应该工作..但我们有同样的问题,并没有使用tpl!功能我们正在使用文本!
这将有效:
define(['underscore'
'marionette',
'modules/header/views/menulayout',
'text!modules/header/templates/headerlayout.html'
], function (_,Marionette, MenuLayout, layoutTemplate) {
var HeaderLayout = Backbone.Marionette.Layout.extend({
template: _.template(layoutTemplate),