0

在此处阅读不同的 Spark 注释类型:https ://github.com/meteor/meteor/wiki/Spark

我仍然对需要放置地标和分支标签的位置感到困惑。两者有什么区别,Handlebars 什么时候调用它们?我是Blade 模板引擎的作者,我正在尝试将 Blade 与 Spark 集成。

4

1 回答 1

1

在 Handlebars 中,每个模板和每个 {{#constant}}...{{/constant}} 区域都用地标包裹。当 DOM 的一个区域被响应式更新时,为了 DOM 保存、生命周期回调(创建/销毁)和地标本地状态,旧地标和新地标被匹配。

地标由包含它们的分支标签形成的“路径”标识。(地标本身对路径没有贡献。)在同一条路径上有两个地标是非法的。计算将进入标记区域或从函数参数主体到 labelBranch 或 createLabel 的地标的 HTML 也很重要。这是因为当您调用这些函数时,Spark 实际上已经与 DOM 匹配,因此它知道在运行之前是否调用“created”(因为这是一个新的地标)(因为它是对旧地标的重新渲染)计算 HTML 的函数。

Handlebars 在几个地方调用 labelBranch 来区分任何应该不同的模板(地标)调用。基本上,标签应该确定导致模板调用的“调用堆栈”。模板源 ({{> someTemplate}}) 中的每个模板调用都会获得一个标签,并且还会检测循环,根据所讨论对象的 _id 或其他一些启发式方法(如果没有的话)标记循环的每次迭代. (请注意,Meteor 模板中的循环有两种代码路径,一种用于数据库中的可观察游标,另一种用于其他所有内容,例如普通数组。)

在这个包含多次“foo”模板的模板片段中,“foo”的每次调用(包括循环的每次迭代)都是在不同的分支标签中完成的:

{{> foo}}
{{> foo}}
{{#each collection}}
  {{> foo}}
{{/each}}
{{> foo}}

如果助手直接调用模板函数怎么办?

var myHelper = function () {
  return Template.foo() + " " + Template.bar();
}

在这种情况下,这一天被保存下来,因为模板包还将每个模板包装在一个标签中,如“Template.foo”或“Template.bar”(标签很便宜)。但是,如果一个助手用不同的参数多次调用同一个模板,就会出现重复的地标问题;在这种情况下,由助手删除额外的分支标签以消除歧义。

由模板包(在 deftemplate.js 中)生成的 Template.foo 的实现使用以下嵌套注释,从外部到内部:标签、数据、地标、事件、隔离。这个顺序很受限制。例如,包含事件注释的地标用于查找数据。隔离注释故意在内部。

车把和模板包的当前因素可能不适合添加额外的模板包!这对我们来说是一个新的领域。不过,我们对拥有更多模板语言非常感兴趣,并且很高兴您正在为此努力。

于 2012-10-17T17:11:18.843 回答