ExtJS:Xtemplate 无法识别 /n /r 等特殊字符

ExtJS: Xtemplate doesn't recognize special characters like /n /r

我的店铺记录有一些特殊字符如下

name: "Hi \r\n\r\n Location Name: Hello\r\n\r\n"

但是在UI上显示时(使用XTemplate),特殊字符不显示,甚至不应用。它们只是被丢弃了。

//X模板

    var cars_template = new Ext.XTemplate(
'<tpl =".">',
'<div class="cars-item">',                 
'<li>',
'<span>Name: </span><span>{[this.updateHtml(values.name)]}</span>',
'</li>',
'</div></tpl>',
{
  updateHtml: function(value){
    if(value){
      value = value.replace(/(?:\r\n|\r|\n)/g, '<br/>');            
    }
    return value;
  }
}

); 

那是因为换行符不是 html,它们需要以一种或另一种方式转换为它们的 html 等价物 <br/>

因此对于字符串,您可以像这样转换新行:

var myString = 'Hi \r\n\r\n Location Name: Hello\r\n\r\n';
myString = myString.replace(/(?:\r\n|\r|\n)/g, '<br/>');

感谢 Emissary,ExtJS 中有一个 built in 函数可以转换为 <br />:

Ext.util.Format.nl2br(value)

Here 是一个 sencha fiddle,带有一个 dataview 的工作示例,下面是相应的代码:

var s = Ext.create('Ext.data.Store', {
            fields: ['name'],
            data: [{
                name: "Hi \r\n\r\n Location Name: Hello\r\n\r\n"
            }, {
                name: "Hi \r\n\r\n A Test Here: Another Test\r\n\r\n"
            }]
        });
        Ext.create('Ext.panel.Panel', {
            renderTo: Ext.getBody(),
            title: 'Example Replacement',
            layout: 'fit',
            items: [{
                xtype:'dataview',
                store: s,
                tpl: [
                '<tpl for=".">', 
                '<div class="cars-item">', 
                '<li>', 
                '<span>Name: </span><span>{[this.updateHtml(values.name)]}</span>', 
                '</li>', 
                '</div>',
                '</tpl>', 
                {
                    updateHtml: function(value) {
                        console.log(value);
                        if (value) {
                            value = value.replace(/(?:\r\n|\r|\n)/g, '<br/>');
                        }
                        console.log(value);
                        return value;
                    }
                }
                ],
                multiSelect: true,
                height: 310,
                trackOver: true,
                itemSelector: '.cars-item',
                emptyText: 'Nothing to display'
            }]
        });

console.log 更改,这是用 <br /> 替换新行。