即使我接受了另一个答案,我还是继续以几种不同的方式实现了这个特定的要求。我发布了我发现的最好和最简单的方法,我认为这对不想使用任何模板引擎(如木偶等)的人很有用。
使用主干和下划线:
文件夹结构
文件夹结构可以如下:
Root:
├───css
├───js
│ ├───router.js
│ ├───model.js
│ ├───view.js
│ └───config.js
├───templates
│ ├───home.html
│ ├───login.html
│ └───register.html
└───images
└───index.html
基本模板
您将需要一个基本模板(index.html),您将在其中呈现不同的模板。这将确保在每次呈现新页面时都不会加载常见的 html 内容,如监听器、页脚、导航菜单等,从而大大提高页面加载速度。
样本结构如下:
<html>
<head>
<!--Relevant CSS files-->
</head>
<body>
<div class="template_body">
<div class="header">
<!--HTML content for header-->
</div>
<div class="content" id="template">
<!--This would be where the dynamic content will be loaded-->
</div>
<div class="footer">
<!--HTML content for footer-->
</div>
</div>
<!--Include relevant JS Files-->
</body>
</html>
注意:请注意,您可以根据需要决定模板的结构。我使用的是更通用的,以便每个人都可以轻松地与之相关。
看法
在您看来,您可以将特定模板渲染到基本模板,如下所示:
var LoginView = Backbone.View.extend({
el: "#template",//Container div inside which we would be dynamically loading the templates
initialize: function () {
console.log('Login View Initialized');
},
render: function () {
var that = this;
//Fetching the template contents
$.get('templates/login.html', function (data) {
template = _.template(data, {});//Option to pass any dynamic values to template
that.$el.html(template);//adding the template content to the main template.
}, 'html');
}
});
var loginView = new LoginView();
请注意,el
标签非常重要。
要将值传递给视图,只需像这样传递它:
var data_to_passed = "Hello";
$.get('templates/login.html', function (data) {
template = _.template(data, { data_to_passed : data_to_passed }); //Option to pass any dynamic values to template
that.$el.html(template); //adding the template content to the main template.
}, 'html');
在模板中:
<%=data_to_passed;%>//Results in "Hello"
您可以传递数组、对象甚至变量。
希望这对您有所帮助。干杯