Как я могу сделать сетку с флажками, которые поддерживают состояние между загрузками страниц? - PullRequest
0 голосов
/ 16 марта 2012

Как сделать так, чтобы флажки оставались отмеченными при обновлении страницы в GridPanel Sencha ExtJS 3.3.0?

У меня есть GridPanel, которая отображает некоторую информацию с флажками.Когда страница обновляется, флажок все еще должен быть установлен.

Есть предложения, идеи или примеры кода?

Ответы [ 2 ]

0 голосов
/ 12 июня 2013

Была такая же проблема, и я исправил ее таким образом - вручную сохраняйте идентификаторы записей, которые я показываю в файлах cookie. Решение не красивое, но у меня работает.

store.on({
    'beforeload': function () {              
        var checkeditems = [];
        for(var i=0;i<gridResources.selModel.selected.length;i++)
        {                           checkeditems.push(grid.selModel.selected.items[i].data.ID);
        }
        if(checkeditems.length>0)
            setCookie("RDCHECKBOXES", checkeditems.join("|"));
    },
    'load': function () {
        if (getCookie("RDCHECKBOXES")) {
            var checkeditems = getCookie("RDCHECKBOXES").split("|");
            for (var i = 0; i<gridResources.store.data.items.length && checkeditems.length>0; i++) {
                for(var j=0;j<checkeditems.length;j++) {
                    if (gridResources.store.data.items[i].data.ID == checkeditems[j]) {
                        gridResources.selModel.select(gridResources.store.data.items[i], true);
                        checkeditems.splice(j, 1);
                        break;
                    }
                }
            }
        }
    }
});

Вот код для функций getCookie () и setCookie ():

// Example:
// setCookie("foo", "bar", "Mon, 01-Jan-2001 00:00:00 GMT", "/");
function setCookie (name, value, expires, path, domain, secure) {
      document.cookie = name + "=" + escape(value) +
        ((expires) ? "; expires=" + expires : "") +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
}

// Example:
// myVar = getCookie("foo");
function getCookie(name) {
    var cookie = " " + document.cookie;
    var search = " " + name + "=";
    var setStr = null;
    var offset = 0;
    var end = 0;
    if (cookie.length > 0) {
        offset = cookie.indexOf(search);
        if (offset != -1) {
            offset += search.length;
            end = cookie.indexOf(";", offset)
            if (end == -1) {
                end = cookie.length;
            }
            setStr = unescape(cookie.substring(offset, end));
        }
    }
    return(setStr);
}
0 голосов
/ 17 марта 2012

Вы когда-нибудь обращали внимание на документацию ExtJS или включенные образцы ? Существует пример сетки , использующий расширение CheckColumn, которое выполняет именно то, что вы просите.

В связанном примере обратите внимание, что столбец флажка связан с полем логической записи

// in your record
{name: 'indoor', type: 'bool'}

и представлен в модели столбца сетки CheckColumn:

// in the grid's column model
xtype: 'checkcolumn',
header: 'Indoor?',
dataIndex: 'indoor',
width: 55

Таким образом, когда логические данные поступают в хранилище с сервера в формате JSON или XML, значения представляются в виде флажков в сетке. Пока вы записываете свои изменения на сервер, ваши логические значения флажка будут сохраняться.

...