我将一些标准的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>
答案 0 :(得分:1)
有一些内置函数可以编码和解码json字符串,例如ko.toJSON和ko.utils.parseJson,但听起来你有一些html实体编码与你的json混合在一起。
当您将数据推送到CarOptionMenu时,可以添加一个函数来解码html编码位。请参阅有关html编码的此问题:HTML Entity Decode
我建议首先考虑一下为什么你的json中有html实体编码。报价在json字符串中使用斜杠(\“)进行转义,而不是使用&amp; quot。