javascript模板继承

Posted

技术标签:

【中文标题】javascript模板继承【英文标题】:javascript template inheritance 【发布时间】:2011-04-08 23:18:39 【问题描述】:

在 Django 框架中,网页模板可以继承自其他模板。在您的子模板中,您定义覆盖父模板中同名块的代码块。我猜还有其他后端模板系统也以这种方式工作,但 Django 是我熟悉的。

现有的 javascript 模板系统是否支持 django 风格的继承?

【问题讨论】:

您应该解释一下“django 风格的继承”是什么,然后也许有人会发布答案。 只是created my own question 关于这个问题,更详细。希望这会有所帮助。 看看nunjucks.jlongster.com它的灵感来自Django的jinja2,提供了一种漂亮的模板继承方式。 【参考方案1】:

如果您想要模板继承和 DTL 语法,您正在寻找的是 Nunjucks

http://mozilla.github.io/nunjucks/

【讨论】:

【参考方案2】:

Mustache.js 支持partials,其工作方式与*类似。除此之外,我什么都没找到——也许我会成功的……

* 好吧,它们根本不像 Django 的模板,但它们是我能找到的最接近的模拟物。

【讨论】:

【参考方案3】:

jQuery 模板有一个 wrap 模板标签,类似于extend:

http://api.jquery.com/template-tag-wrap/

【讨论】:

【参考方案4】:

虽然不是“模板继承”,但是 Beard.js 可以通过创建模板引用帮助您重用模板,我认为这可以帮助您实现相同的目标。

http://jspopisno1.github.com/Beard/#exmp_syntax-reference

【讨论】:

【参考方案5】:

查看 Handlebars.js。它允许您定义可用于划分不同块的辅助方法,并以类似于 Rails 的content_for :my_areayield :my_area 的方式回显它们。

【讨论】:

【参考方案6】:

是的,使用Dustjs,您可以让模板从通用基本模板继承其大部分内容。以下是它的工作原理,Dustjs:(参见“块和内联部分”部分)

在文件“base_template”中:

Start
+title/
Middle
+main/
End

“继承” base_template 的模板:

>base_template/
<title
  Child Title
/title
<main
  Child Content
/main

结果如下:

Start
Child Title
Middle
Child Content
End

相关问题:似乎只支持1级继承:Is there a way to do more than one level of inheritance value overrides with dust.js?

【讨论】:

【参考方案7】:

在向 Handlebars 添加模板继承方面正在进行一些工作。

查看这个最近的 GitHub 问题:https://github.com/wycats/handlebars.js/issues/208 还有这篇博文:Template Inheritance for Handlebars

【讨论】:

以上是关于javascript模板继承的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript OOP Javascript模板与构造函数和继承

Symfony2 Assetic + Twig 模板 JavaScript 继承

javascript模拟实现继承,继承一次父类模板和原型对象

javascript面向对象

JavaScript 对象继承

JavaScript设计模式与开发实践 模板方法模式