Выбор значения в Combobox из cookie - PullRequest
0 голосов
/ 13 марта 2012

Программисты!

Я хочу сделать следующее: На экране пользователи могут выбирать значения в выпадающих списках.Эти значения хранятся в файле cookie, поэтому их можно восстановить при посещении той же страницы позже в сеансе.Печенье работает, хорошая работа для ExtJs.Комбо-боксы привязаны к серверу и будут извлекать свои записи после их открытия.Это означает, что при восстановлении значений cookie требуемая запись может отсутствовать.Извлечение записей с сервера не является решением, поскольку комбинированные списки разбиты на страницы, и было бы очень сложно точно определить, какую страницу я должен загрузить.

Я попробовал следующее решение:

if(cookie.cobblerContactId != null) {
        var recDef = Ext.data.Record.create([
            {name: 'Id', type: 'int'},
            {name: 'Achternaam', type: 'string'}
        ]);
        var rec = new recDef({
            Id: cookie.cobblerContactId,
            Achternaam: cookie.CobblerContactName
        });           
        behandelaarStore.add(rec);
        behandelaarCombo.setValue(cookie.cobblerContactId);
        behandelaarCombo.render();
        //editForm.render();
    }

Как видите, я искусственно создаю запись, добавляю ее в хранилище данных и выбираю ее.Проблема в том, что Combobox не отображает правильное значение, он не выбран.После открытия он получит первую страницу из 25 записей с сервера.Я также попробовал - закомментировал - editForm.render (), но это также не сработало.Написание текста непосредственно в Combobox (cookie.CobblerContactName) не сработало, я попробовал selectText (), но, похоже, что-то другое.Если я просто использую selectValue (), он отображает Id, а не текст, поскольку хранилище данных еще не имеет записи с этим Id.

Я пробовал лучшие части двух дней, но не могу получитьэто на работу.У кого-нибудь есть решение?

Ответы [ 2 ]

0 голосов
/ 14 марта 2012

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

function getCookie() {
    if(Ext.util.Cookies.get('ticketIndexFilter') == null)
        return;
    var filterSet = Ext.ComponentMgr.get('additionalFilterSet');    
    var cookie = Ext.decode(Ext.util.Cookies.get('ticketIndexFilter'));
    txtNummer.setValue(cookie.TicketNr);
    if(cookie.datumVan != null && cookie.datumVan != ""){
        datVan.setValue(cookie.datumVan.substr(0, 10));
        filterSet.expand();
    }
    if(cookie.datumTm != null && cookie.datumTm != ""){
        datTm.setValue(cookie.datumTm.substr(0, 10));
        filterSet.expand();
    }
    if(cookie.relationId != null && cookie.relationId != "") {
        var recDef = Ext.data.Record.create([
            {name: 'Id', type: 'int'},
            {name: 'Name', type: 'string'}
        ]);
        var rec = new recDef({
            Id: cookie.relationId,
            Name: cookie.relationName
        }, cookie.relationId);           
        relatieStore.add(rec);
        relatieCombo.setValue(cookie.relationId);
    }
    if(cookie.cobblerContactId != null && cookie.cobblerContactId != "") {
        var recDef = Ext.data.Record.create([
            {name: 'Id', type: 'int'},
            {name: 'Achternaam', type: 'string'}
        ]);
        var rec = new recDef({
            Id: cookie.cobblerContactId,
            Achternaam: cookie.cobblerContactName
        }, cookie.cobblerContactId);           
        behandelaarStore.add(rec);
        behandelaarCombo.setValue(cookie.cobblerContactId);
        filterSet.expand();
    }
    if(cookie.statusId != null && cookie.statusId != "") {
        var recDef = Ext.data.Record.create([
            {name: 'Id', type: 'int'},
            {name: 'Naam', type: 'string'}
        ]);
        var rec = new recDef({
            Id: cookie.statusId,
            Naam: cookie.statusName
        }, cookie.statusId);           
        statusStore.add(rec);
        statusCombo.setValue(cookie.statusId);
        filterSet.expand();
    }
    if(cookie.priorityId != null && cookie.priorityId != "") {
        var recDef = Ext.data.Record.create([
            {name: 'Id', type: 'int'},
            {name: 'Naam', type: 'string'}
        ]);
        var rec = new recDef({
            Id: cookie.priorityId,
            Naam: cookie.priorityName
        }, cookie.priorityId);           
        prioriteitStore.add(rec);
        prioriteitCombo.setValue(cookie.priorityId);
        filterSet.expand();
    }
    if(cookie.relationContactId != null && cookie.relationContactId != "") {
        var recDef = Ext.data.Record.create([
            {name: 'Id', type: 'int'},
            {name: 'Achternaam', type: 'string'}
        ]);
        var rec = new recDef({
            Id: cookie.relationContactId,
            Achternaam: cookie.relationContactName
        }, cookie.relationContactId);           
        contactStore.add(rec);
        contactCombo.setValue(cookie.relationContactId);
        filterSet.expand();
    }
    if(cookie.categoryId != null && cookie.categoryId != "") {
        var recDef = Ext.data.Record.create([
            {name: 'Id', type: 'int'},
            {name: 'Naam', type: 'string'}
        ]);
        var rec = new recDef({
            Id: cookie.categoryId,
            Naam: cookie.categoryName
        }, cookie.categoryId);           
        categorieStore.add(rec);
        categorieCombo.setValue(cookie.categoryId);
        filterSet.expand();
    }
    //finally, an easy one
    opgelostBox.setValue(cookie.finalized);
}

function setCookie(){
    var filterPresets = {
        TicketNr: txtNummer.getValue(),
        datumVan: datVan.getValue(),
        datumTm: datTm.getValue(),
        relationId: relatieCombo.getValue(),
        relationName: relatieCombo.getValue() == "" ? null : relatieStore.getById(relatieCombo.getValue()).get('Name'),
        cobblerContactId: behandelaarCombo.getValue(),
        cobblerContactName: behandelaarCombo.getValue() == "" ? null : behandelaarStore.getById(behandelaarCombo.getValue()).get('Achternaam'),
        statusId: statusCombo.getValue(), 
        statusName: statusCombo.getValue() == "" ? null : statusStore.getById(statusCombo.getValue()).get('Naam'),
        priorityId: prioriteitCombo.getValue(),
        priorityName: prioriteitCombo.getValue() == "" ? null : prioriteitStore.getById(prioriteitCombo.getValue()).get('Naam'),
        relationContactId: contactCombo.getValue(),
        relationContactName: contactCombo.getValue() == "" ? null : contactStore.getById(contactCombo.getValue()).get('Achternaam'),
        categoryId: categorieCombo.getValue(),
        categoryName: categorieCombo.getValue() == "" ? null : categorieStore.getById(categorieCombo.getValue()).get('Naam'),
        finalized: opgelostBox.getValue()            
    };
    Ext.util.Cookies.set('ticketIndexFilter', Ext.encode(filterPresets));        
}

setCookie вызывается, когда пользователь нажимает кнопку поиска.getCookie вызывается в Ext.OnReady для предварительной настройки элементов управления.Мне понадобилось почти 10 часов, чтобы понять, поэтому я решил поделиться.

В первом посте содержалась ошибка: cookie.CobblerContactName вместо cookie.cobblerContactName

0 голосов
/ 13 марта 2012

Попробуйте установить forceSelection: false, а затем вы можете установить текст, который не является частью списка.

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