Javascript HTML标记在CanJS中通过小胡子模板转义

Javascript HTML标记在CanJS中通过小胡子模板转义,javascript,html,mustache,canjs,canjs-view,Javascript,Html,Mustache,Canjs,Canjs View,我的要求是我需要向用户显示一组选项。我使用了mustache模板来使用canjsjavascript框架呈现选项 这里的问题是,当我尝试渲染以下选项时: 马铃薯12卢比 mustache模板正在转义my HTML,并使用HTML标记显示值 我在我的模板中也使用了{{{}},但它没有帮助 请检查小提琴是否也一样 我的胡子模板: {{#options}} <option value="{{value}}" {{#selected}}selected{{/selecte

我的要求是我需要向用户显示一组选项。我使用了mustache模板来使用canjsjavascript框架呈现选项

这里的问题是,当我尝试渲染以下选项时: 马铃薯12卢比

mustache模板正在转义my HTML,并使用HTML标记显示值

我在我的模板中也使用了{{{}},但它没有帮助

请检查小提琴是否也一样

我的胡子模板:

{{#options}}
            <option value="{{value}}" {{#selected}}selected{{/selected}}>{{{display}}}</option>
 {{/options}}
{{{#options}
{{{display}}}
{{/options}}
将数据绑定到模板的示例控件:

var frag = can.view('{{' +this.options.view+ '}}',{
        /*
           I am passing observe here which is escaping the HTML tags like:
               Cabbage <span>Price: Rs.12</span>
        */
        options: arrayObserver

        /*
           This is rendering properly. Not sure about what is the difference ?
               Cabbage Price: Rs.12
        */
        //options: array
    });
var frag=can.view({{{}+this.options.view+}}{
/*
我在这里传递的是转义HTML标记,如:
卷心菜价格:12卢比
*/
选项:arrayObserver
/*
这是正确的渲染。不确定有什么区别?
卷心菜价格:12卢比
*/
//选项:阵列
});
我的选项阵列:

var array = [{
        selected: true,
        display: "None"
    },{
        selected: false,
        display: "Tomato"
    },{
        selected: false,
        display: "Potato <span>Rs.10</span>"
    },{
        selected: false,
        display: 'Cabbage <span>Price: Rs.12</span>'
    }];
    arrayObserver = new can.Observe.List(array);
var数组=[{
选择:正确,
显示:“无”
},{
选择:false,
展品:“西红柿”
},{
选择:false,
显示:“土豆Rs.10”
},{
选择:false,
展示:“卷心菜价格:12卢比”
}];
arrayObserver=新的can.Observe.List(数组);
任何帮助都会很好


谢谢。

我会不惜一切代价避免尝试将任何类型的DOM元素添加到选项元素中,因为这永远不能保证有效

,您会发现唯一接受的内容模型要么是空的,要么是文本,这意味着什么也没有,或者只是文本。CanJS紧贴规范,这就是为什么它将其呈现为纯文本,因为选项只允许文本

如果您在某些数据中使用了跨距和其他HTML,而您无法通过任何其他方式消除它们,我建议您编写一个帮助函数,为您从文本中去除HTML标记,例如

can.Mustache.registerHelper('displayHelper', function(display) {
  var stripped = display().replace(/<[^>]*>/g, "");
  return stripped;
});
can.Mustache.registerHelper('displayHelper',函数(display){
var=display();
返回剥离;
});
并修改模板,使其看起来像

{{#options}}
  <option value="{{value}}" {{#selected}}selected{{/selected}}>
    {{{displayHelper display}}}
  </option>
{{/options}}
{{{#options}
{{{displayHelper display}}}
{{/options}}

谢谢您提供的信息。我将与助手一起尝试。