KnockoutJS。将数据绑定到“选择”而不进行编码(转义)

时间:2013-06-17 13:34:12

标签: knockout.js

我遇到了问题,绑定到选择列表的所有元素都会自动编码(或转义)。 我使用下面的场景:

  1. 用户点击multiselect中的元素;
  2. 来自单击选项的
  3. 文本显示为文本输入值(html输入类型=文本);
  4. 对此复制的文本值进行编码,因为单击选项中的文本实际上也是编码的;例如。输入将包含N&M而不是N&M;
  5. 是否可以阻止编码,或者可能有一些解决方法?

    感谢。

1 个答案:

答案 0 :(得分:3)

如果我正确理解了您的问题,那么是的,有一种方法可以设置select元素的数据绑定,以便标签和值属性以您希望的方式显示。

要实现这一点,您必须将optionsTextoptionsValue绑定传递给函数,如下所示:

<select data-bind="options: list, 
                   optionsText: function(item) { return unescape(item); }, 
                   optionsValue: function(item) { return unescape(item); }, 
                   value: selectedOption"></select>

unescape函数应该是清除列表中每个项目的标签和/或值的函数之一。您甚至可以通过在视图模型中编写函数来使其更清晰:

 optionsText: unescapeMyItem

...然后在您的视图模型中声明:

this.unescapeMyItem = function(item) {
     return _.unescape(item); // your code to unescape the value
}

对于unescape函数,您可以使用Underscore's unescape function来执行此任务。

made a fiddle所以你可以看到它是如何工作的(我已经使用了Underscore功能)。