Knockout绑定需要解析JSON(")

时间:2015-03-23 16:27:53

标签: jquery json knockout.js

我将一些标准的jquery动态选择菜单重写为淘汰赛。在痛苦的jquery中,它为选择菜单添加了选项:

 $.each(data.DropDownOptions, function() {
     if (this.ID != undefined) {
          $(".SelectDDL").append($("<option value='" + this.ID + "'></option>").html(this.Option));
           }
      });

选项经常有“其中的符号”this.Option“因为它的JSON而显示为&amp; quot。但在实际的下拉列表中它们显示为”(实际符号)。

我使用几乎相同的逻辑并使用这样的模板将其重写为敲除。

function CarOptionMenu(data) {
    return {
        CarOptions: ko.observableArray(data),
        selection: ko.observable()
    }
}
function KnockoutModel() {
    var self = this;
    self.menuWrapper = ko.observableArray([]);
}

var list = new KnockoutModel();
ko.applyBindings(list );

代替上面的jQuery函数,它添加了这样的选项:

  list.menuWrapper.push(new CarOptionMenu(data.DropDownOptions));

除了&amp; quot are&amp; quot之外哪个工作正常,并且永远不会被解析为“符号。有关如何修复它的任何想法吗?

- EDIT-- 这是选择元素和模板:

    <script type="text/html" id="car-option-menu-template">
        <select data-bind='options:CarOptions, optionsText:"Option",optionsValue:"ID",value: selection' style="width: 100% !important; margin-top: 5px;"></select>
    </script>
    <div data-bind="template: { name: 'car-option-menu-template', foreach: menuWrapper}"></div>

1 个答案:

答案 0 :(得分:1)

有一些内置函数可以编码和解码json字符串,例如ko.toJSON和ko.utils.parseJson,但听起来你有一些html实体编码与你的json混合在一起。

当您将数据推送到CarOptionMenu时,可以添加一个函数来解码html编码位。请参阅有关html编码的此问题:HTML Entity Decode

我建议首先考虑一下为什么你的json中有html实体编码。报价在json字符串中使用斜杠(\“)进行转义,而不是使用&amp; quot。