Как мне получить отображаемое значение из ячейки таблицы в ExtJS TableStore

#javascript #extjs

#javascript #extjs

Вопрос:

Я создаю функцию фильтра, которая фильтрует все ячейки в моей таблице.

Для этого я перебираю свой tablestore и получаю доступ к каждому из полей элемента записи, вот так.

 tablestore.each(function (rec, idx) {
    contains = false;

    for (field in rec.data) {

        var cellValueAsString = ""   rec.data[field]
    }
}
  

Мой вопрос: как мне получить отображаемое значение, которое пользователь видит на странице HTML?

У меня есть несколько средств визуализации, например, средство визуализации даты и средство визуализации, которое создает строки из номера состояния.

значение cellValueAsString в приведенном выше коде просто возвращает базовое значение, а не отображаемое значение. Есть ли какой-либо способ доступа к отображаемому значению из хранилища таблиц и / или объекта rec?

спасибо!

Ответ №1:

Каждый столбец сетки имеет свойство с именем renderer, которое является функцией. Затем ваша задача — добраться до этой функции. И для этого вы могли бы создать где-нибудь массив (map fieldName => средство визуализации) и вызвать его как в вашей сетке, так и в новом месте или только в вашем новом месте.

Комментарии:

1. но я не могу получить доступ к этому из хранилища? Я должен был бы получить его из Grid?

2. Средство визуализации отвечает только за сетку (которая отображает данные, поскольку она является компонентом Ext и является частью «V» в MVC), а не за хранилище (которое только хранит данные и считывает их из разных источников данных). Я рекомендую не трогать хранилище (это часть «M» в MVC).

Ответ №2:

Пожалуйста, попробуйте это

Добавьте прослушиватель itemclick в свою сетку следующим образом

 listeners:{
            itemclick: this.getRowItem,
            scope:this
        }
  

Добавьте tdCls в свой столбец, из которого вы хотите получить отображаемое значение.Как показано ниже

 { 
   text: 'Name',  
   dataIndex: 'name',
   renderer: function(value, metadata, record){

        return value " hello";

        },
        tdCls:'name-render'

    }
  

Ваша функция getRowItems должна быть такой, как показано ниже

 getRowItem: function(gridPanel, record, item, index, e, eOpts){


   var tdItem= item.getElementsByClassName('name-render');
   var actualTextDisplayed = tdItem.firstChild.innerHTML;
   return actualTextDisplayed ;

}
  

Я думаю, это альтернатива.