不同块中的活动部分开始和结束标记

Ractive section start and end tag in different block

我们有在 CKEditor 中创建的 RactiveJS 模板,它输出这个

<p>Can you see it?</p>
<p>{{# visible }}</p>
<p>Now you see me</p>
<p>{{/ visible }}</p>

这曾经在 Ractive v0.4 中有效,但在最新版本中会出现解析错误。

似乎在不同的 HTML 块中有一个部分的开始和结束标记不再有效。

有没有办法解决这个问题,无需更改模板?



已更新以澄清问题:

在不更改模板的情况下,没有真正解决这个问题的方法。解析器在最近的几个版本中变得更加严格,因为像这个这样的混乱场景,这不会导致它看起来的结构。在这种情况下,您会得到一些额外的嵌套 p 标记,这并不是特别有害,但在其他情况下却是有害的。所以你在 0.4 中有效的是:

<p>Can you see it?</p>
<p>
  {{# visible }}
    <p></p>
    <p>Now you see me</p>
    <p></p>
  {{/ visible }}
</p>

Ractive 0.8(我认为是 0.5+,但肯定是 0.7+)一直持续到块打开后的 </p>,它看到未打开的元素的结束标记并且抛出错误。 Ractive 从来不支持块跨越标签,因为没有办法在 VDOM 中表示它,这是一个严格的树结构。

<p>Can you see it?</p>
<p>{{# visible }}</p>
<p>Now you see me</p>
<p>{{/ visible }}</p>

根本问题可能是因为您的 CKEditor 配置将输入作为富文本格式,而您的系统将其作为标记发出。内容作者的意思可能是以下内容(在所见即所得编辑器上按原样查看),这完全有道理:

Can you see it?
{{# visible }}
Now you see me
{{/ visible }}

我强烈建议首先检查您的所见即所得配置,然后让您的编辑器编辑并保存纯文本。然后重做以这种方式输入的所有数据。 从 Ractive 方面没有办法解决它,因为本质上,标记是格式错误的模板。 0.4 还不够严格,无法捕捉到这一点。

还值得注意的是,Ractive 将模板表示为树。尽管使用了类似 mustache 的模板语法,但它并没有像实际的 Mustache 库那样处理字符串 interpolation/concatenation。