#yui
#yui
Вопрос:
Я использую фильтрацию данных на стороне клиента YUI datable с помощью выпадающего списка HTML (опции AAA, BBB, CCC). Фильтрация выполняется правильно, когда я меняю / выбираю выпадающий параметр (пример AAA), когда я загружаю таблицу данных YUI в первый раз с помощью gAllReminderCallsArray, но она вообще не фильтруется, когда я перезагружаю таблицу данных YUI с обновленным gAllReminderCallsArray с тем же значением, выбранным в раскрывающемся списке (AAA).
YAHOO.example.ReminderCallsTable = function()
{
MyDataSource = new YAHOO.util.DataSource(gAllReminderCallsArray,{
responseType : YAHOO.util.DataSource.TYPE_JSARRAY,
responseSchema : {fields : ["OpportunityID","button","ReminderCallOutcome","SchedulingAssistant"]}
,doBeforeCallback : function (req,raw,res,cb) {
// This is the filter function
var data = res.results || [],
filtered = [],
i,l;
if (req) {
req = req.toLowerCase();
for (i = 0, l = data.length; i < l; i) {
if (!data[i].SchedulingAssistant.toLowerCase().indexOf(req)) {
filtered.push(data[i]);
}
}
res.results = filtered;
}
return res;
}
});
var MyColumnDefs = [
{key:"OpportunityID", label: "Opportunity ID"},
{key:"button", label:"Update/Show", formatter:YAHOO.widget.DataTable.formatButton},
{key:"ReminderCallOutcome", label: "Outcome",sortable:true,formatter:YAHOO.widget.DataTable.formatImage},
{key:"SchedulingAssistant", label: "CSR",sortable:true}
];
var MyConfigs = {paginator : new YAHOO.widget.Paginator({rowsPerPage: 20})};
var MyDataTable = new YAHOO.widget.DataTable("ReminderCallsTable", MyColumnDefs, MyDataSource,MyConfigs);
filterTimeout = null;
updateFilter = function () {
// Reset timeout
filterTimeout = null;
// Get filtered data
MyDataSource.sendRequest(YAHOO.util.Dom.get('ServiceCoordinator').value,{
success : MyDataTable.onDataReturnInitializeTable,
failure : MyDataTable.onDataReturnInitializeTable,
scope : MyDataTable,
argument: state
});
};
YAHOO.util.Event.on('ServiceCoordinator','change',function (e) {
clearTimeout(filterTimeout);
setTimeout(updateFilter,600);
});
MyDataTable.subscribe("rowMouseoverEvent", MyDataTable.onEventHighlightRow);
MyDataTable.subscribe("rowMouseoutEvent", MyDataTable.onEventUnhighlightRow);
MyDataTable.subscribe("rowClickEvent",MyDataTable.onEventSelectRow);
gAllRecords = MyDataTable;
MyDataTable.subscribe("buttonClickEvent", function(oArgs){
var oRecord = this.getRecord(oArgs.target);
gSelectedObjectID = oRecord.getData('EventID');
var CurrentInfo = oRecord.getData("ClaimantName") " - " oRecord.getData("Type");
SelectedReminderCallCurrentOutcome(gSelectedObjectID,CurrentInfo);
});
return {
oDS: MyDataSource,
oDT: MyDataTable
};
}();
Комментарии:
1. Правильно ли вы обновляете источник данных? или datatable (с тем же источником)?
2. Да, я обновляю его правильно.
3. Ну, ваш код выглядит нормально. Можете ли вы привести два или три примера записей из gAllReminderCallsArray? Также, чтобы помочь в отладке, я бы добавил несколько консолей. регистрируется в функции doBeforeCallback, в частности >> if (!data[i]. SchedulingAssistant.toLowerCase().indexOf(req)) {console.log(что-то вроде helpyoudebug)} else { console.log(что-то еще);}