YUI: фильтрация данных на стороне клиента - PullRequest
1 голос
/ 07 сентября 2011

У меня есть источник данных, который получает данные с сервера. Затем он используется в Dataatable. Я хочу иметь возможность фильтровать данные в таблице на стороне клиента, не совершая еще один вызов на сервер.

// Data source definition
myDataSource = new YAHOO.util.DataSource("myurl");
myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
myDataSource.connXhrMode = "queueRequests";
myDataSource.responseSchema = {
    resultsList: "ResultSet.Result",
    fields: ["field1","field2"]
}

// Datatable definition
myDataTable = new YAHOO.widget.DataTable("container", myColumnDefs,myDataSource, {});

1 Ответ

0 голосов
/ 07 сентября 2011

Подкласс DataSource и переопределите метод sendRequest, чтобы вы вызывали переданный обратный вызов с вашим собственным отфильтрованным набором результатов в качестве аргумента results.

filterDataSource=function(arg) {
    filterDataSource.superclass.constructor.call(this,arg);
}

YAHOO.extend(filterDataSource,YAHOO.util.XHRDataSource);

filterDataSource.prototype.sendRequest=function(request, callback) {
    var wrapCallBack=function (request,results,error) {
        // !!! do filtering on results here !!!
        callback.success.call(this,request,results,error);
    };
    filterDataSource.superclass.sendRequest.call(this,request, {
        success: wrapCallBack, argument: callback.argument
    });
}

И сделайте ваш myDataSource a new filterDataSource вместо new Yahoo.util.DataSource.

Отказ от ответственности: этот код, вероятно, не работает так, как написано;Я вырвал его из какого-то старого рабочего кода и, скорее всего, пропустил какой-то критический фрагмент.Тем не менее, я надеюсь, что это передает основную идею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...