2012-03-13 58 views
0

各位程序員!從Cookie中選擇Combobox中的值

我想要做以下事情:在屏幕上,用戶可以選擇Comboboxes中的值。這些值存儲在cookie中,以便稍後在會話中訪問同一頁時可以恢復它們。餅乾工作發現,ExtJs的工作很好。 Comboboxes是服務器綁定的,並在打開它們時檢索它們的記錄。這意味着,在恢復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的記錄。

我一直在嘗試兩天的更好的部分,但不能得到它的工作。有人有解決方案嗎?

回答

0

嘗試設置forceSelection: false然後您可以設置不屬於列表的文本。

+0

forceSelection似乎沒有過的問題。只要我的8小時過期,我可以發佈這個問題的答案,即實際運行的代碼。 – Paul1977 2012-03-13 15:08:04

0

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方法被調用。在Ext.OnReady中調用getCookie來預設控件。我花了將近10個小時的時間,所以我想我會分享。

的第一篇文章中包含一個錯誤:cookie.CobblerContactName而不是cookie.cobblerContactName

相關問題