什么';javascript模板引擎的意义是什么?

什么';javascript模板引擎的意义是什么?,javascript,php,underscore.js,Javascript,Php,Underscore.js,我知道人们通常给出的答案,但我需要一个具体的例子来说明为什么需要这些答案 我得到的最新印象(主要来自underline.js)是,它使代码更像PHP,因为您可以在PHP中使用like?> 这样做的目的是使代码不那么像意大利面条,并且在表示和逻辑之间有明显的区别。这是每个人都说的,但我不确定为什么这需要一个模板引擎 为什么不能用纯javascript来实现呢?您所需要的只是一个将数据作为参数的函数,并且您可以在不发明新语言的情况下保留javascript语法,这看起来很可笑。例如,您可以执行以下操

我知道人们通常给出的答案,但我需要一个具体的例子来说明为什么需要这些答案

我得到的最新印象(主要来自underline.js)是,它使代码更像PHP,因为您可以在PHP中使用like?>

这样做的目的是使代码不那么像意大利面条,并且在表示和逻辑之间有明显的区别。这是每个人都说的,但我不确定为什么这需要一个模板引擎

为什么不能用纯javascript来实现呢?您所需要的只是一个将数据作为参数的函数,并且您可以在不发明新语言的情况下保留javascript语法,这看起来很可笑。例如,您可以执行以下操作:

populateTable(obj) {
    $('#model').html('
    <h2>' + obj.title + '</h2>' +
    <ul> ... </ul>
}
populateTable(obj){
$('#model').html('
“+obj.title+”+
}

这对我来说似乎很好。这是一个专用于使用传递给它的一些模型数据呈现表的函数。为什么我们需要发明新的语法?

我的一个原因是我更喜欢这样写:

<div class="entry">
  <h1>{{title}}</h1>
  <div class="body">
    {{body}}
  </div>
</div>
var createEntryTemplate = function(obj) {
  return '<div class="entry">' +
    '<h1>' + obj.title + '</h1>' +
    '<div class="body">' + obj.body +
    '</div>' +
    '</div>';
};

{{title}}
{{body}}
在这上面写:

<div class="entry">
  <h1>{{title}}</h1>
  <div class="body">
    {{body}}
  </div>
</div>
var createEntryTemplate = function(obj) {
  return '<div class="entry">' +
    '<h1>' + obj.title + '</h1>' +
    '<div class="body">' + obj.body +
    '</div>' +
    '</div>';
};
var createEntryTemplate=函数(obj){
返回“”+
''+对象标题+''+
''+obj.body+
'' +
'';
};
后一种方法也更容易出错——如果不是对你来说,那么对另一个人来说可能更容易出错。想象一下,你正在与一位没有太多编程经验的设计师合作,他需要加入并替换大量HTML


哦,糟了…

基本上,使用客户端模板引擎,在服务器端渲染和客户端执行之间进行交易,所以我想到了这些

  • 赞成:您可能很容易节省大量带宽,因为原始数据通常比HTML呈现小得多
  • 赞成:通过在客户机上进行渲染工作,可以轻松节省大量服务器CPU周期
  • 赞成:客户可能对渲染限制(例如屏幕大小)有更多或更容易访问的知识
  • 缺点:将渲染从已知的稳定环境移动到无法控制的移动目标
  • 缺点:非交互式客户端(例如搜索引擎)不会看到您的最终渲染,从而使SEO、索引等变得困难

a)如果您有更大的HTML片段,那么编写起来就更容易了。b) 您可以将表示与填充它的逻辑分离,这样可以更容易地重用模板。c) 模板通常被编译成某种中间表示形式,这将使使用不同数据填充同一模板的速度更快。总的来说,人们看到了对它的需要并创造了它。如果你不认为有必要,你就不必使用它。不要吹毛求疵,但你的例子有很多语法错误。字符串中不能有文字换行符,第4行的字符串不是引号。@FelixKling我不太明白你的意思(c)。模板——基本上是连接在某个地方的字符串——如何被编译成任何东西,特别是在JavaScript中?任何模板引擎的意义是什么?如果你回答了这个问题,你就得到了JavaScript模板引擎的答案。@rvighne:啊,看来它们没有我预期的那么多优化。模板被简单地转换为函数,因此对于后续调用,模板不必再次解析(例如)。但是你是对的,与直接使用字符串比较相比,它没有什么区别。+1因为你清楚地表明,模板只是在整个过程中平滑处理,不会发挥神奇的作用。回答得好。OP甚至没有考虑服务器端模板引擎;他们只是提供了sorts.IIUC作为参考,最初的问题是“javascript模板引擎有什么意义?”。我试着给出我的观点。