2015-08-04 3 views
1

Вставить код взорвать внутри Sencha fiddle. Посмотрите на элемент, который читает ProblemElement.Как отобразить html как текст внутри EXTJS поле со списком

Ext.define('DropDownList', { 
    extend: 'Ext.form.ComboBox', 
    editable: false, 

    alias: 'widget.dropdownlist', 
    initComponent: function() { 
     this.callParent([arguments]); 
    }, 
    onRender: function() { 
     this.callParent(); 

    } 
}); 


var states = Ext.create('Ext.data.Store', { 
    fields: ['abbr', 'name'], 
    data: [ 

     { 
      "name": "Alabama" 
     }, 
     { 
      "name": "Alaska" 
     }, 
     { 
      "name": " <input value='ProblemElement'>" 
     } 
    ] 
}); 

Ext.application({ 

    name: 'MyApp', 
    launch: function() { 


     Ext.create('Ext.form.Panel', { 

      items: [{ 
       xtype: 'dropdownlist', 
       hideLabel: false, 
       title: 'ComboBox Test', 
       fieldLabel: 'Choose State', 
       store: states, 
       displayField: 'name', 
       htmlEncode: true, 
       renderTo: Ext.getBody() 
      }] 

     }); 
    } 
}); 

Проблема, с которой я столкнулся, заключается в том, что элемент, отображаемый в раскрывающемся списке, отображается как HTML. Однако после того, как я его выберем, он корректно отображает текст (<input value='ProblemElement'>), как я его хочу.

+1

Я предполагаю, что это надуманный пример реальной проблемы ...? –

+0

Да. Но если вы можете это решить, я могу применить тот же принцип к более серьезной проблеме. – developer747

ответ

3

Выпадающий список на самом деле является Boundlist, а способ отображения текста товара управляется его методом getInnerTpl. Вы можете настроить выпадающее меню в комбо с listConfig так, что внутренний текст передается через Ext.String.htmlEncode:

listConfig: { 
    getInnerTpl: function(displayField) { 
     return '{[Ext.String.htmlEncode(values.' + displayField + ')]}'; 
    } 
} 

Полный пример: https://fiddle.sencha.com/#fiddle/rkk

+0

Это сработало! Спасибо!!! – developer747

Смежные вопросы