2011-09-30 73 views
3

我是ExtJS新手,需要將ExtJS Textarea的內容發送到後端服務器,以便在用戶輸入時保存(自動保存設施)。有沒有辦法做到這一點。我目前已經註冊了一個keyup監聽器來收集輸入值,如下所示:ExtJS Textarea - 自動保存用戶輸入內容

items: [{ 
    xtype: 'textarea', 
    id: 'notes', 
    anchor: '100%', 
    height: 270, 
    msgTarget: 'under', 
    fieldLabel: 'Note', 
    enableKeyEvents: true, 
    listeners: { 
     'keyup': function(textarea, event) { 
      var v= textarea.getValue(); 
      Ext.Ajax.request({ 
       url: 'buffernote.action', 
       params: {value: v} 
      }) 
     } 
    } 
} 
}] 

我在正確的方向嗎?

+0

您應該向我們提供ExtJS的版本... 3.x,4.x – sra

+0

ExtJS版本是3.3。該代碼似乎工作,但它是太多的開銷。每次擊鍵都會進行服務器調用。我需要在將輸入推送到服務器進行保存之前緩衝輸入。我如何設置緩衝區? –

+0

右鍵單擊並粘貼?可能想使用'change'事件嗎?只是一個想法... –

回答

2

如果你需要一個緩衝,把一些ref到textarea的,然後調用

this.mon(myTextarea, 'keyup', this.onMyTextareaKeyup, this, {buffer: 1000}); 

其中onMyTextareaKeyup包含您所提供的要求去做的代碼。有關緩衝區的更多信息,請參閱API

+0

感謝您的答案。由於時間限制,我繼續實施以下方式,儘管它可能不是最佳方法。 var notes = Ext.getCmp('notes'); var notesvalue = notes.getRawValue(); notesvalue = encodeURIComponent(notesvalue); Ext.Ajax.request({method:'POST',url:..,params:notesvalue} ) –

1

您應該使用兩個事件:一個關鍵事件和一個模糊事件(模糊,更改或有效) 然後填充'按鍵命中'緩衝區並將整個字段填滿並重置緩衝區。如果模糊事件得到執行,也將整個字段寫回。

就我個人而言,我使用的商店爲我執行了更新操作&。所以我只需要修改商店中的記錄。 對於這種方式,你只需要與record.beginEdit() & record.endEdit() 在ExtJS的4.x的,他們現在正在使用的術語Ext.data.Model玩,但它更表現了相同的ExtJS 3.X

這家商店將需要選項autoSave: true,否則您必須在商店上撥打save()以提交任何更改。

+0

這是一個添加功能。用例是這樣的。我們有一個嵌入了包含這個textarea的瀏覽器應用程序的桌面組件。我需要繼續在用戶的會話中保存textarea的內容,以便在用戶關閉桌面組件時後端應用程序保存內容。爲了實現這一點,我需要實現某種自動保存功能。如果您有任何有用的片段可供分享,我將不勝感激。 –

+0

@Deepak如果它運行在一個孤立的環境中,或者WWW背後的概念保持不變,它並不重要。如果keystrokebuffer已滿或用戶離開textarea,則自動保存。並不是說關鍵事件會捕獲鍵盤上的所有鍵。而且您應該使用該事件來識別按鍵而不是確切的按鍵! – sra