2011-09-30 36 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