Javascript 在jsView中像这样使用html转换器在语法上是否错误:data link=";html{:property}";而不是数据链路=";{html:property}";?

Javascript 在jsView中像这样使用html转换器在语法上是否错误:data link=";html{:property}";而不是数据链路=";{html:property}";?,javascript,html,templates,jsrender,jsviews,Javascript,Html,Templates,Jsrender,Jsviews,我们在jsViews/jsRender中呈现的许多模板上使用html转换器。我们遇到了一个问题,当jsViews呈现的文本中有一个标记时,jsViews正在摸索一个“不匹配”错误。直到最近更新到最新版本,我们才注意到这一点。她是我们最初使用的代码段,现在导致错误: <div id="Resizable" data-link="html{:Text}"></div> 现在,我注意到在jsRender APi上,它说要像下面那样处理标记,这样做时,它会正确地呈现

我们在jsViews/jsRender中呈现的许多模板上使用html转换器。我们遇到了一个问题,当jsViews呈现的文本中有一个
标记时,jsViews正在摸索一个“不匹配”错误。直到最近更新到最新版本,我们才注意到这一点。她是我们最初使用的代码段,现在导致错误:

    <div id="Resizable" data-link="html{:Text}"></div>

现在,我注意到在jsRender APi上,它说要像下面那样处理标记,这样做时,它会正确地呈现数据,按照需要对html内容进行编码

        <div id="Resizable" data-link="{html:Text}"></div>


我的问题是:它以前是否设置得不正确,我们只是从来没有注意到错误,在最新版本上是否发生了更改,并且后一种方法是否是使用html编码器的唯一正确方法?非常感谢您的帮助。谢谢

以下是说明数据链接元素语法的文档主题:

请特别参阅完整语法-多个目标、多个标记、多个绑定…部分,其中说明:

完整语法允许您将多个表达式分别绑定到不同的目标“attrib”,其编写方式如下:data link=“attrib1{linkExpression1}attrib2{linkExpression2}…”

请注意下面的内容:

大多数元素的默认目标是innerText,但对于输入和选择,它是value

并举例说明:

  • (与innerText的单向绑定-默认目标属性-,因此HTML会自动编码
  • (单向绑定到innerHTML)
因此,这意味着数据链接div的默认目标是innerText——这意味着,如果您注入HTML标记,它实际上将“免费”对该标记进行HTML编码。它不会将HTML标记作为内部HTML插入

如果您确实添加了HTML转换器,那么您可以像这样编写它,但是当您作为innerText插入时添加HTML编码不会改变用户看到的内容。 (同一事物的另一种语法是您上面所写的
)。请参阅此处有关HTML转换器的文档:

如果希望作为内部HTML插入,则使用HTML目标,上面的第二个示例是:

然后可以添加编码,如
中所示

但更可能的情况是使用默认的innerText目标,而不使用显式转换器

另请参见对类似问题的回答


顺便说一句-不,这不应该改变最新版本中的行为。如果您看到行为发生了变化,是否可以在JsViews GitHub项目上添加一个问题,理想情况下使用JSFIDLE显示两个版本之间呈现不同的内容

在Boris的帮助下,通过查看文档,答案很清楚。它在语法上并不错误,但有两种不同的用法。一个用于编码数据,另一个用于将值设置为innerHTML属性

  {html:property}    ---> encoding

  html{:property}    --->   use innerHTML at target

  html{html:property}  --->  This fixed our problem, and was the solution we needed.

反应很好。非常感谢,我将进一步研究它,看看是否有什么变化,或者它是否在我们这边,然后仔细阅读,如果需要的话,在Github上打开一个问题。另外,感谢对html转换器文档的参考,。在浏览你的网站时,我错过了一些方法。是的,没错,这两种方法都是有效的语法,但“语义”却大不相同。(事实上几乎相反,因为一个进行编码,以防止数据作为元素插入,另一个选择innerHTML作为目标,这意味着数据可以包含作为元素插入的HTML标记。)