我们正在评估Typescript + Node作为PHP的替代方案。
Typescript对我们特别有吸引力,因为优秀,一致的编辑器/ IDE支持 - 我目前推荐的最大问题是,视图(模板)似乎没有得到任何真正的IDE支持。也就是说,我无法找到具有适当IDE支持的JS模板引擎 - 而且“正确”,我指的是视图模型的自动完成和检查。
我们目前在PHP中使用视图的方法就是这样的:
<?php /** @var OrderFormView $view */ ?>
<div class="order-form">
...
<div class="order-total"><?= $view->total ?></div>
...
</div>
在像PhpStorm这样的编辑器中,每个视图文件开头的类型提示为$view
提供了自动完成功能,并为$view->total
这样的表达式提供了设计时检查 - 这在相当大的团队,例如juniors可以使用视图模型而无需钻取代码,而不是使用无类型的视图字典。
现在使用Typescript / Javascript,我们需要一种等效的(服务器端)方法 - 例如,对于Typescript的语言支持。 JetBrains IDE和ATOM.IO非常棒,但是我们还没有找到任何能够为视图提供相同程度支持的东西。我们的解决方案很重要,因此为视图提供良好的设计时支持非常重要,因此我们可以快速行动。
我们目前了解的最佳选择是Typescript中的简单字符串模板,例如:
module view {
interface OrderFormView {
total: number;
// ...
}
export function order_form(view: OrderFormView) {
return `
<div class="order-form">
...
<div class="order-total">${ view.total }</div>
...
</div>
`;
}
}
这会起作用,并且会提供我们需要的IDE支持级别,但是对于奇怪的缩进等看起来并不是很好。
是否有任何Javascript(服务器端,例如Node)模板引擎可以提供我们正在寻找的内容?
编辑:或者,一个模板引擎使用简单的HTML和各种类型的DSL将模型绑定到HTML,沿着queryTemplates,但希望更现代。
编辑:不。将数据绑定(JS)与实际模板(HTML)分离会导致绑定代码与实际模板之间的紧密耦合 - 我们的模板必须易于替换,因此这种方法不起作用。解决方案必须涉及视图模型,我非常确定 - 并且模板必须能够独立存在,这是给定的。它必须为视图模型提供IDE支持和检查/自动完成功能。我所知道的唯一符合这些要求的是PHP。我想毕竟它必须是好东西; - )