Добавление Live Query в dGrid в стиле OnDemandGrid с использованием хранилища JsonRest?

Как реализовать dijit/TextBox, который фильтрует данные в dGrid в стиле OnDemandGrid, когда dGrid поддерживается хранилищем JsonRest? Я хочу искать в поле и обновлять сетку по мере ввода.

Я не могу найти никаких примеров в документах dGrid, и хотя это выглядит как раз то, что нужно - Можно ли фильтровать данные в dgrid, как вы может в датагриде? Если да, то как? — он использует MemoryStore, и замена его на хранилище JsonRest не работает.

Нужно ли запрашивать магазин, а затем обновлять сетку? Нужен ли мне наблюдаемый? А как насчет dojo.store.util.SimpleQueryEngine? Это часть ответа.

Предположительно, на сервере также должны быть некоторые изменения, чтобы отвечать на запросы.


person voidstate    schedule 11.01.2013    source источник


Ответы (1)


Оказывается, это довольно легко. Вы просто устанавливаете свойство запроса в сетке и вызываете refresh().

Затем мне пришлось внести простое изменение в код на стороне сервера, чтобы обрабатывать строку запроса ?search=whatever.

Вот мой код:

// assuming we have a declarative dijit/TextBox and a reference to our grid in myGrid                                           
// wait for DOM before wiring up our textbox (when dijit parsed)
ready( function() 
{
    var timeoutId = null,
        searchTextBox = registry.byId( 'searchTextBox' );

    searchTextBox.watch( 'value', function( name, oldValue, newValue ) 
    {
        if( newValue.length == 1 )
        {
            return;
        }   

        if( timeoutId ) 
        {
            clearTimeout( timeoutId );
            timeoutId = null;
        };

        timeoutId = setTimeout( function() 
        {
            myGrid.query = { search: newValue };
            myGrid.refresh();
        }, 300 );
    } );
} );
person voidstate    schedule 11.01.2013