#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 ;
}
Я думаю, это альтернатива.