- 浏览: 110824 次
- 性别:
- 来自: 湖南
文章分类
最新评论
-
liuyiisme:
[i][/i][b][/b][u][/u]
[url][ ...
JFileChooser -
xyc717:
你前面那黄色字颜色能在恶心点么……
this.form.el is undefined FormPanel或Panel加载数据 -
里克尔奇:
您好,谢谢你的文章,我测试了一下,但是视频没有充满播放器啊!急 ...
视频点播系统 -
就一剑1:
<s:intercept-url pattern=&qu ...
springside3.3.1 spring security -
yu11223344:
能把权限控制的xml的形式改成查数据库吗?
springside3.3.1 spring security
转载:
官方或网上ExtJS实现多文件上传的UploadDialog只适用于ExtJS2.x,我经过修改使其使用于ExtJS3.x,并在修改时尽量尊重于原始功能代码,请大家放心使用! 官方或网上ExtJS实现多文件上传的UploadDialog只适用于ExtJS2.x,我经过修改使其使用于ExtJS3.x,并在修改时尽量尊重于原始功能代码,请大家放心使用!
官方或网上ExtJS实现多文件上传的UploadDialog只适用于ExtJS2.x,我经过修改使其使用于ExtJS3.x,并在修改时尽量尊重于原始功能代码,请大家放心使用! 官方或网上ExtJS实现多文件上传的UploadDialog只适用于ExtJS2.x,我经过修改使其使用于ExtJS3.x,并在修改时尽量尊重于原始功能代码,请大家放心使用!
/** * This namespace should be in another file but I dicided to put it here for consistancy. */ Ext.namespace('Ext.ux.Utils'); /** * This class implements event queue behaviour. * @update 2010-12-28 Shi Rui Updates make UploadDialog for ExtJS3.X * @class Ext.ux.Utils.EventQueue * @param function handler Event handler. * @param object scope Handler scope. */ Ext.ux.Utils.EventQueue = function(handler, scope) { if (!handler) { throw 'Handler is required.'; } this.handler = handler; this.scope = scope || window; this.queue = []; this.is_processing = false; /** * Posts event into the queue. * * @access public * @param mixed event Event identificator. * @param mixed data Event data. */ this.postEvent = function(event, data) { data = data || null; this.queue.push({event: event, data: data}); if (!this.is_processing) { this.process(); } } this.flushEventQueue = function() { this.queue = []; }, /** * @access private */ this.process = function() { while (this.queue.length > 0) { this.is_processing = true; var event_data = this.queue.shift(); this.handler.call(this.scope, event_data.event, event_data.data); } this.is_processing = false; } } /** * This class implements Mili's finite state automata behaviour. * * Transition / output table format: * { * 'state_1' : { * 'event_1' : [ * { * p|predicate: function, // Transition predicate, optional, default to true. * // If array then conjunction will be applyed to the operands. * // Predicate signature is (data, event, this). * a|action: function|array, // Transition action, optional, default to Ext.emptyFn. * // If array then methods will be called sequentially. * // Action signature is (data, event, this). * s|state: 'state_x', // New state - transition destination, optional, default to * // current state. * scope: object // Predicate and action scope, optional, default to * // trans_table_scope or window. * } * ] * }, * * 'state_2' : { * ... * } * ... * } * * @param mixed initial_state Initial state. * @param object trans_table Transition / output table. * @param trans_table_scope Transition / output table's methods scope. */ Ext.ux.Utils.FSA = function(initial_state, trans_table, trans_table_scope) { this.current_state = initial_state; this.trans_table = trans_table || {}; this.trans_table_scope = trans_table_scope || window; Ext.ux.Utils.FSA.superclass.constructor.call(this, this.processEvent, this); } Ext.extend(Ext.ux.Utils.FSA, Ext.ux.Utils.EventQueue, { current_state : null, trans_table : null, trans_table_scope : null, /** * Returns current state * * @access public * @return mixed Current state. */ state : function() { return this.current_state; }, /** * @access public */ processEvent : function(event, data) { var transitions = this.currentStateEventTransitions(event); if (!transitions) { throw "State '" + this.current_state + "' has no transition for event '" + event + "'."; } for (var i = 0, len = transitions.length; i < len; i++) { var transition = transitions[i]; var predicate = transition.predicate || transition.p || true; var action = transition.action || transition.a || Ext.emptyFn; var new_state = transition.state || transition.s || this.current_state; var scope = transition.scope || this.trans_table_scope; if (this.computePredicate(predicate, scope, data, event)) { this.callAction(action, scope, data, event); this.current_state = new_state; return; } } throw "State '" + this.current_state + "' has no transition for event '" + event + "' in current context"; }, /** * @access private */ currentStateEventTransitions : function(event) { return this.trans_table[this.current_state] ? this.trans_table[this.current_state][event] || false : false; }, /** * @access private */ computePredicate : function(predicate, scope, data, event) { var result = false; switch (Ext.type(predicate)) { case 'function': result = predicate.call(scope, data, event, this); break; case 'array': result = true; for (var i = 0, len = predicate.length; result && (i < len); i++) { if (Ext.type(predicate[i]) == 'function') { result = predicate[i].call(scope, data, event, this); } else { throw [ 'Predicate: ', predicate[i], ' is not callable in "', this.current_state, '" state for event "', event ].join(''); } } break; case 'boolean': result = predicate; break; default: throw [ 'Predicate: ', predicate, ' is not callable in "', this.current_state, '" state for event "', event ].join(''); } return result; }, /** * @access private */ callAction : function(action, scope, data, event) { switch (Ext.type(action)) { case 'array': for (var i = 0, len = action.length; i < len; i++) { if (Ext.type(action[i]) == 'function') { action[i].call(scope, data, event, this); } else { throw [ 'Action: ', action[i], ' is not callable in "', this.current_state, '" state for event "', event ].join(''); } } break; case 'function': action.call(scope, data, event, this); break; default: throw [ 'Action: ', action, ' is not callable in "', this.current_state, '" state for event "', event ].join(''); } } }); // ---------------------------------------------------------------------------------------------- // /** * Ext.ux.UploadDialog namespace. */ Ext.namespace('Ext.ux.UploadDialog'); /** * File upload browse button. * * @class Ext.ux.UploadDialog.BrowseButton */ Ext.ux.UploadDialog.BrowseButton = Ext.extend(Ext.Button, { input_name : 'file', input_file : null, original_handler : null, original_scope : null, /** * @access private */ initComponent : function() { Ext.ux.UploadDialog.BrowseButton.superclass.initComponent.call(this); this.original_handler = this.handler || null; this.original_scope = this.scope || window; this.handler = null; this.scope = null; }, /** * @access private */ onRender : function(ct, position) { Ext.ux.UploadDialog.BrowseButton.superclass.onRender.call(this, ct, position); this.createInputFile(); }, /** * @access private */ createInputFile : function() { var button_container = this.el.child(".x-btn-mc"); button_container.position('relative'); this.input_file = Ext.DomHelper.append( button_container, { tag: 'input', type: 'file', size: 1, name: this.input_name || Ext.id(this.el), style: 'position: absolute; display: block; border: none; cursor: pointer' }, true ); this.input_file.setOpacity(0.0); this.adjustInputFileBox(); if (this.handleMouseEvents) { this.input_file.on('mouseover', this.onMouseOver, this); this.input_file.on('mousedown', this.onMouseDown, this); } if(this.tooltip){ if(typeof this.tooltip == 'object'){ Ext.QuickTips.register(Ext.apply({target: this.input_file}, this.tooltip)); } else { this.input_file.dom[this.tooltipType] = this.tooltip; } } this.input_file.on('change', this.onInputFileChange, this); this.input_file.on('click', function(e) { e.stopPropagation(); }); }, /** * @access private */ autoWidth : function() { Ext.ux.UploadDialog.BrowseButton.superclass.autoWidth.call(this); this.adjustInputFileBox(); }, /** * @access private */ adjustInputFileBox : function() { var btn_cont, btn_box, inp_box, adj; if (this.el && this.input_file) { btn_cont = this.el.child('.x-btn-mc'); btn_box = btn_cont.getBox(); this.input_file.setStyle('font-size', (btn_box.width * 0.5) + 'px'); inp_box = this.input_file.getBox(); adj = {x: 3, y: 3} if (Ext.isIE) { adj = {x: -3, y: 3} } this.input_file.setLeft(btn_box.width - inp_box.width + adj.x + 'px'); this.input_file.setTop(btn_box.height - inp_box.height + adj.y + 'px'); } }, /** * @access public */ detachInputFile : function(no_create) { var result = this.input_file; no_create = no_create || false; if (typeof this.tooltip == 'object') { Ext.QuickTips.unregister(this.input_file); } else { this.input_file.dom[this.tooltipType] = null; } this.input_file.removeAllListeners(); this.input_file = null; if (!no_create) { this.createInputFile(); } return result; }, /** * @access public */ getInputFile : function() { return this.input_file; }, /** * @access public */ disable : function() { Ext.ux.UploadDialog.BrowseButton.superclass.disable.call(this); this.input_file.dom.disabled = true; }, /** * @access public */ enable : function() { Ext.ux.UploadDialog.BrowseButton.superclass.enable.call(this); this.input_file.dom.disabled = false; }, /** * @access public */ destroy : function() { var input_file = this.detachInputFile(true); input_file.remove(); input_file = null; Ext.ux.UploadDialog.BrowseButton.superclass.destroy.call(this); }, /** * @access private */ onInputFileChange : function() { if (this.original_handler) { this.original_handler.call(this.original_scope, this); } } }); /** * Toolbar file upload browse button. * * @class Ext.ux.UploadDialog.TBBrowseButton */ Ext.ux.UploadDialog.TBBrowseButton = Ext.extend(Ext.ux.UploadDialog.BrowseButton, { hideParent : true, onDestroy : function() { Ext.ux.UploadDialog.TBBrowseButton.superclass.onDestroy.call(this); if(this.container) { this.container.remove(); } } }); /** * Record type for dialogs grid. * * @class Ext.ux.UploadDialog.FileRecord */ Ext.ux.UploadDialog.FileRecord = Ext.data.Record.create([ {name: 'filename'}, {name: 'state', type: 'int'}, {name: 'note'}, {name: 'input_element'}, {name: 'params'} ]); Ext.ux.UploadDialog.FileRecord.STATE_QUEUE = 0; Ext.ux.UploadDialog.FileRecord.STATE_FINISHED = 1; Ext.ux.UploadDialog.FileRecord.STATE_FAILED = 2; Ext.ux.UploadDialog.FileRecord.STATE_PROCESSING = 3; /** * Dialog class. * * @class Ext.ux.UploadDialog.Dialog */ Ext.ux.UploadDialog.Dialog = function(config) { var default_config = { border: false, width: 450, height: 300, minWidth: 450, minHeight: 300, plain: true, constrainHeader: true, draggable: true, closable: true, maximizable: false, minimizable: false, resizable: true, autoDestroy: true, closeAction: 'hide', title: this.i18n.title, cls: 'ext-ux-uploaddialog-dialog', // -------- url: '', base_params: {}, permitted_extensions: [], reset_on_hide: true, allow_close_on_upload: false, upload_autostart: false, post_var_name: 'file' } config = Ext.applyIf(config || {}, default_config); config.layout = 'absolute'; Ext.ux.UploadDialog.Dialog.superclass.constructor.call(this, config); } Ext.extend(Ext.ux.UploadDialog.Dialog, Ext.Window, { fsa : null, state_tpl : null, form : null, grid_panel : null, progress_bar : null, is_uploading : false, initial_queued_count : 0, upload_frame : null, /** * @access private */ //--------------------------------------------------------------------------------------------- // initComponent : function() { Ext.ux.UploadDialog.Dialog.superclass.initComponent.call(this); // Setting automata protocol var tt = { // -------------- 'created' : { // -------------- 'window-render' : [ { action: [this.createForm, this.createProgressBar, this.createGrid], state: 'rendering' } ], 'destroy' : [ { action: this.flushEventQueue, state: 'destroyed' } ] }, // -------------- 'rendering' : { // -------------- 'grid-render' : [ { action: [this.fillToolbar, this.updateToolbar], state: 'ready' } ], 'destroy' : [ { action: this.flushEventQueue, state: 'destroyed' } ] }, // -------------- 'ready' : { // -------------- 'file-selected' : [ { predicate: [this.fireFileTestEvent, this.isPermittedFile], action: this.addFileToUploadQueue, state: 'adding-file' }, { // If file is not permitted then resetting internal input type file. action: this.resetAddButton } ], 'grid-selection-change' : [ { action: this.updateToolbar } ], 'remove-files' : [ { action: [this.removeFiles, this.fireFileRemoveEvent] } ], 'reset-queue' : [ { action: [this.resetQueue, this.fireResetQueueEvent] } ], 'start-upload' : [ { predicate: this.hasUnuploadedFiles, action: [ this.setUploadingFlag, this.saveInitialQueuedCount, this.updateToolbar, this.updateProgressBar, this.prepareNextUploadTask, this.fireUploadStartEvent ], state: 'uploading' }, { // Has nothing to upload, do nothing. } ], 'stop-upload' : [ { // We are not uploading, do nothing. Can be posted by user only at this state. } ], 'hide' : [ { predicate: [this.isNotEmptyQueue, this.getResetOnHide], action: [this.resetQueue, this.fireResetQueueEvent] }, { // Do nothing } ], 'destroy' : [ { action: this.flushEventQueue, state: 'destroyed' } ] }, // -------------- 'adding-file' : { // -------------- 'file-added' : [ { predicate: this.isUploading, action: [this.incInitialQueuedCount, this.updateProgressBar, this.fireFileAddEvent], state: 'uploading' }, { predicate: this.getUploadAutostart, action: [this.startUpload, this.fireFileAddEvent], state: 'ready' }, { action: [this.updateToolbar, this.fireFileAddEvent], state: 'ready' } ] }, // -------------- 'uploading' : { // -------------- 'file-selected' : [ { predicate: [this.fireFileTestEvent, this.isPermittedFile], action: this.addFileToUploadQueue, state: 'adding-file' }, { // If file is not permitted then resetting internal input type file. action: this.resetAddButton } ], 'grid-selection-change' : [ { // Do nothing. } ], 'start-upload' : [ { // Can be posted only by user in this state. } ], 'stop-upload' : [ { predicate: this.hasUnuploadedFiles, action: [ this.resetUploadingFlag, this.abortUpload, this.updateToolbar, this.updateProgressBar, this.fireUploadStopEvent ], state: 'ready' }, { action: [ this.resetUploadingFlag, this.abortUpload, this.updateToolbar, this.updateProgressBar, this.fireUploadStopEvent, this.fireUploadCompleteEvent ], state: 'ready' } ], 'file-upload-start' : [ { predicate: this.fireBeforeFileUploadStartEvent, action: [this.uploadFile, this.findUploadFrame, this.fireFileUploadStartEvent] }, { action: this.postFileUploadCancelEvent } ], 'file-upload-success' : [ { predicate: this.hasUnuploadedFiles, action: [ this.resetUploadFrame, this.updateRecordState, this.updateProgressBar, this.prepareNextUploadTask, this.fireUploadSuccessEvent ] }, { action: [ this.resetUploadFrame, this.resetUploadingFlag, this.updateRecordState, this.updateToolbar, this.updateProgressBar, this.fireUploadSuccessEvent, this.fireUploadCompleteEvent ], state: 'ready' } ], 'file-upload-error' : [ { predicate: this.hasUnuploadedFiles, action: [ this.resetUploadFrame, this.updateRecordState, this.updateProgressBar, this.prepareNextUploadTask, this.fireUploadErrorEvent ] }, { action: [ this.resetUploadFrame, this.resetUploadingFlag, this.updateRecordState, this.updateToolbar, this.updateProgressBar, this.fireUploadErrorEvent, this.fireUploadCompleteEvent ], state: 'ready' } ], 'file-upload-failed' : [ { predicate: this.hasUnuploadedFiles, action: [ this.resetUploadFrame, this.updateRecordState, this.updateProgressBar, this.prepareNextUploadTask, this.fireUploadFailedEvent ] }, { action: [ this.resetUploadFrame, this.resetUploadingFlag, this.updateRecordState, this.updateToolbar, this.updateProgressBar, this.fireUploadFailedEvent, this.fireUploadCompleteEvent ], state: 'ready' } ], 'file-upload-canceled' : [ { predicate: this.hasUnuploadedFiles, action: [ this.setRecordCanceledState, this.updateProgressBar, this.prepareNextUploadTask, this.fireUploadCanceledEvent ] }, { action: [ this.resetUploadingFlag, this.setRecordCanceledState, this.updateToolbar, this.updateProgressBar, this.fireUploadCanceledEvent, this.fireUploadCompleteEvent ], state: 'ready' } ], 'hide' : [ { predicate: this.getResetOnHide, action: [this.stopUpload, this.repostHide] }, { // Do nothing. } ], 'destroy' : [ { predicate: this.hasUnuploadedFiles, action: [ this.resetUploadingFlag, this.abortUpload, this.fireUploadStopEvent, this.flushEventQueue ], state: 'destroyed' }, { action: [ this.resetUploadingFlag, this.abortUpload, this.fireUploadStopEvent, this.fireUploadCompleteEvent, this.flushEventQueue ], state: 'destroyed' } ] }, // -------------- 'destroyed' : { // -------------- } } this.fsa = new Ext.ux.Utils.FSA('created', tt, this); // Registering dialog events. this.addEvents({ 'filetest': true, 'fileadd' : true, 'fileremove' : true, 'resetqueue' : true, 'uploadsuccess' : true, 'uploaderror' : true, 'uploadfailed' : true, 'uploadcanceled' : true, 'uploadstart' : true, 'uploadstop' : true, 'uploadcomplete' : true, 'beforefileuploadstart' : true, 'fileuploadstart' : true }); // Attaching to window events. this.on('render', this.onWindowRender, this); this.on('beforehide', this.onWindowBeforeHide, this); this.on('hide', this.onWindowHide, this); this.on('destroy', this.onWindowDestroy, this); // Compiling state template. this.state_tpl = new Ext.Template( "<div class='ext-ux-uploaddialog-state ext-ux-uploaddialog-state-{state}'> </div>" ).compile(); }, createForm : function() { this.form = Ext.DomHelper.append(this.body, { tag: 'form', method: 'post', action: this.url, style: 'position: absolute; left: -100px; top: -100px; width: 100px; height: 100px' }); }, createProgressBar : function() { this.progress_bar = this.add( new Ext.ProgressBar({ x: 0, y: 0, anchor: '0', value: 0.0, text: this.i18n.progress_waiting_text }) ); }, createGrid : function() { var store = new Ext.data.Store({ proxy: new Ext.data.MemoryProxy([]), reader: new Ext.data.JsonReader({}, Ext.ux.UploadDialog.FileRecord), sortInfo: {field: 'state', direction: 'DESC'}, pruneModifiedRecords: true }); var cm = new Ext.grid.ColumnModel([ { header: this.i18n.state_col_title, width: this.i18n.state_col_width, resizable: false, dataIndex: 'state', sortable: true, renderer: this.renderStateCell.createDelegate(this) }, { header: this.i18n.filename_col_title, width: this.i18n.filename_col_width, dataIndex: 'filename', sortable: true, renderer: this.renderFilenameCell.createDelegate(this) }, { header: this.i18n.note_col_title, width: this.i18n.note_col_width, dataIndex: 'note', sortable: true, renderer: this.renderNoteCell.createDelegate(this) } ]); this.grid_panel = new Ext.grid.GridPanel({ ds: store, cm: cm, x: 0, y: 22, anchor: '0 0', border: true, viewConfig: { autoFill: true, forceFit: true }, bbar : new Ext.Toolbar() }); this.grid_panel.on('render', this.onGridRender, this); this.add(this.grid_panel); this.grid_panel.getSelectionModel().on('selectionchange', this.onGridSelectionChange, this); }, fillToolbar : function() { var tb = this.grid_panel.getBottomToolbar(); tb.x_buttons = {} tb.x_buttons.add = tb.addItem(new Ext.ux.UploadDialog.TBBrowseButton({ input_name: this.post_var_name, text: this.i18n.add_btn_text, tooltip: this.i18n.add_btn_tip, iconCls: 'ext-ux-uploaddialog-addbtn', handler: this.onAddButtonFileSelected, scope: this })); tb.x_buttons.remove = tb.addButton({ text: this.i18n.remove_btn_text, tooltip: this.i18n.remove_btn_tip, iconCls: 'ext-ux-uploaddialog-removebtn', handler: this.onRemoveButtonClick, scope: this }); tb.x_buttons.reset = tb.addButton({ text: this.i18n.reset_btn_text, tooltip: this.i18n.reset_btn_tip, iconCls: 'ext-ux-uploaddialog-resetbtn', handler: this.onResetButtonClick, scope: this }); tb.add('-'); tb.x_buttons.upload = tb.addButton({ text: this.i18n.upload_btn_start_text, tooltip: this.i18n.upload_btn_start_tip, iconCls: 'ext-ux-uploaddialog-uploadstartbtn', handler: this.onUploadButtonClick, scope: this }); tb.add('-'); tb.x_buttons.indicator = tb.addItem( new Ext.Toolbar.Item( Ext.DomHelper.append(tb.getEl(), { tag: 'div', cls: 'ext-ux-uploaddialog-indicator-stoped', html: ' ' }) ) ); tb.add('->'); tb.x_buttons.close = tb.addButton({ text: this.i18n.close_btn_text, tooltip: this.i18n.close_btn_tip, handler: this.onCloseButtonClick, scope: this }); }, renderStateCell : function(data, cell, record, row_index, column_index, store) { return this.state_tpl.apply({state: data}); }, renderFilenameCell : function(data, cell, record, row_index, column_index, store) { if (Ext.QuickTips.isEnabled()) { cell.attr = 'ext:qtip="' + Ext.util.Format.htmlEncode(data) + '"'; } else { cell.attr = 'title="' + data + '"'; } return data; }, renderNoteCell : function(data, cell, record, row_index, column_index, store) { if (Ext.QuickTips.isEnabled()) { cell.attr = 'ext:qtip="' + Ext.util.Format.htmlEncode(data) + '"'; } else { cell.attr = 'title="' + data + '"'; } return data; }, getFileExtension : function(filename) { var result = null; var parts = filename.split('.'); if (parts.length > 1) { result = parts.pop(); } return result; }, isPermittedFileType : function(filename) { var result = true; if (this.permitted_extensions.length > 0) { result = this.permitted_extensions.indexOf(this.getFileExtension(filename)) != -1; } return result; }, isPermittedFile : function(browse_btn) { var result = false; var filename = browse_btn.getInputFile().dom.value; if (this.isPermittedFileType(filename)) { result = true; } else { Ext.Msg.alert( this.i18n.error_msgbox_title, String.format( this.i18n.err_file_type_not_permitted, filename, this.permitted_extensions.join(this.i18n.permitted_extensions_join_str) ) ); result = false; } return result; }, fireFileTestEvent : function(browse_btn) { return this.fireEvent('filetest', this, browse_btn.getInputFile().dom.value) !== false; }, addFileToUploadQueue : function(browse_btn) { var input_file = browse_btn.detachInputFile(); input_file.appendTo(this.form); input_file.setStyle('width', '100px'); input_file.dom.disabled = true; var store = this.grid_panel.getStore(); store.add( new Ext.ux.UploadDialog.FileRecord({ state: Ext.ux.UploadDialog.FileRecord.STATE_QUEUE, filename: input_file.dom.value, note: this.i18n.note_queued_to_upload, input_element: input_file }) ); this.fsa.postEvent('file-added', input_file.dom.value); }, fireFileAddEvent : function(filename) { this.fireEvent('fileadd', this, filename); }, updateProgressBar : function() { if (this.is_uploading) { var queued = this.getQueuedCount(true); var value = 1 - queued / this.initial_queued_count; this.progress_bar.updateProgress( value, String.format( this.i18n.progress_uploading_text, this.initial_queued_count - queued, this.initial_queued_count ) ); } else { this.progress_bar.updateProgress(0, this.i18n.progress_waiting_text); } }, updateToolbar : function() { var tb = this.grid_panel.getBottomToolbar(); if (this.is_uploading) { tb.x_buttons.remove.disable(); tb.x_buttons.reset.disable(); tb.x_buttons.upload.enable(); if (!this.getAllowCloseOnUpload()) { tb.x_buttons.close.disable(); } Ext.fly(tb.x_buttons.indicator.getEl()).replaceClass( 'ext-ux-uploaddialog-indicator-stoped', 'ext-ux-uploaddialog-indicator-processing' ); tb.x_buttons.upload.setIconClass('ext-ux-uploaddialog-uploadstopbtn'); tb.x_buttons.upload.setText(this.i18n.upload_btn_stop_text); if(tb.x_buttons.upload.getEl()) tb.x_buttons.upload.getEl() .child(tb.x_buttons.upload.buttonSelector) .dom[tb.x_buttons.upload.tooltipType] = this.i18n.upload_btn_stop_tip; } else { tb.x_buttons.remove.enable(); tb.x_buttons.reset.enable(); tb.x_buttons.close.enable(); Ext.fly(tb.x_buttons.indicator.getEl()).replaceClass( 'ext-ux-uploaddialog-indicator-processing', 'ext-ux-uploaddialog-indicator-stoped' ); tb.x_buttons.upload.setIconClass('ext-ux-uploaddialog-uploadstartbtn'); tb.x_buttons.upload.setText(this.i18n.upload_btn_start_text); if(tb.x_buttons.upload.getEl()) tb.x_buttons.upload.getEl() .child(tb.x_buttons.upload.buttonSelector) .dom[tb.x_buttons.upload.tooltipType] = this.i18n.upload_btn_start_tip; if (this.getQueuedCount() > 0) { tb.x_buttons.upload.enable(); } else { tb.x_buttons.upload.disable(); } if (this.grid_panel.getSelectionModel().hasSelection()) { tb.x_buttons.remove.enable(); } else { tb.x_buttons.remove.disable(); } if (this.grid_panel.getStore().getCount() > 0) { tb.x_buttons.reset.enable(); } else { tb.x_buttons.reset.disable(); } } }, saveInitialQueuedCount : function() { this.initial_queued_count = this.getQueuedCount(); }, incInitialQueuedCount : function() { this.initial_queued_count++; }, setUploadingFlag : function() { this.is_uploading = true; }, resetUploadingFlag : function() { this.is_uploading = false; }, prepareNextUploadTask : function() { // Searching for first unuploaded file. var store = this.grid_panel.getStore(); var record = null; store.each(function(r) { if (!record && r.get('state') == Ext.ux.UploadDialog.FileRecord.STATE_QUEUE) { record = r; } else { r.get('input_element').dom.disabled = true; } }); record.get('input_element').dom.disabled = false; record.set('state', Ext.ux.UploadDialog.FileRecord.STATE_PROCESSING); record.set('note', this.i18n.note_processing); record.commit(); this.fsa.postEvent('file-upload-start', record); }, fireUploadStartEvent : function() { this.fireEvent('uploadstart', this); }, removeFiles : function(file_records) { var store = this.grid_panel.getStore(); for (var i = 0, len = file_records.length; i < len; i++) { var r = file_records[i]; r.get('input_element').remove(); store.remove(r); } }, fireFileRemoveEvent : function(file_records) { for (var i = 0, len = file_records.length; i < len; i++) { this.fireEvent('fileremove', this, file_records[i].get('filename'), file_records[i]); } }, resetQueue : function() { var store = this.grid_panel.getStore(); store.each( function(r) { r.get('input_element').remove(); } ); store.removeAll(); }, fireResetQueueEvent : function() { this.fireEvent('resetqueue', this); }, uploadFile : function(record) { Ext.Ajax.request({ url : this.url, params : Ext.applyIf(record.get('params') || {}, this.base_params || this.baseParams || this.params), method : 'POST', form : this.form, isUpload : true, success : this.onAjaxSuccess, failure : this.onAjaxFailure, scope : this, record: record }); }, fireBeforeFileUploadStartEvent : function(record) { return this.fireEvent('beforefileuploadstart', this, record.get('filename'), record) !== false; }, postFileUploadCancelEvent : function(record) { this.fsa.postEvent('file-upload-canceled', record); }, setRecordCanceledState : function(record) { record.set('state', Ext.ux.UploadDialog.FileRecord.STATE_FAILED); record.set('note', this.i18n.note_canceled); record.commit(); }, fireUploadCanceledEvent : function(record) { this.fireEvent('uploadcanceled', this, record.get('filename'), record); }, fireFileUploadStartEvent : function(record) { this.fireEvent('fileuploadstart', this, record.get('filename'), record); }, updateRecordState : function(data) { if ('success' in data.response && data.response.success) { data.record.set('state', Ext.ux.UploadDialog.FileRecord.STATE_FINISHED); data.record.set( 'note', data.response.message || data.response.error || this.i18n.note_upload_success ); } else { data.record.set('state', Ext.ux.UploadDialog.FileRecord.STATE_FAILED); data.record.set( 'note', data.response.message || data.response.error || this.i18n.note_upload_error ); } data.record.commit(); }, fireUploadSuccessEvent : function(data) { this.fireEvent('uploadsuccess', this, data.record.get('filename'), data.response, data.record); }, fireUploadErrorEvent : function(data) { this.fireEvent('uploaderror', this, data.record.get('filename'), data.response, data.record); }, fireUploadFailedEvent : function(data) { this.fireEvent('uploadfailed', this, data.record.get('filename'), data.record); }, fireUploadCompleteEvent : function() { this.fireEvent('uploadcomplete', this); }, findUploadFrame : function() { this.upload_frame = Ext.getBody().child('iframe.x-hidden:last'); }, resetUploadFrame : function() { this.upload_frame = null; }, removeUploadFrame : function() { if (this.upload_frame) { this.upload_frame.removeAllListeners(); this.upload_frame.dom.src = 'about:blank'; this.upload_frame.remove(); } this.upload_frame = null; }, abortUpload : function() { this.removeUploadFrame(); var store = this.grid_panel.getStore(); var record = null; store.each(function(r) { if (r.get('state') == Ext.ux.UploadDialog.FileRecord.STATE_PROCESSING) { record = r; return false; } }); record.set('state', Ext.ux.UploadDialog.FileRecord.STATE_FAILED); record.set('note', this.i18n.note_aborted); record.commit(); }, fireUploadStopEvent : function() { this.fireEvent('uploadstop', this); }, repostHide : function() { this.fsa.postEvent('hide'); }, flushEventQueue : function() { this.fsa.flushEventQueue(); }, resetAddButton : function(browse_btn) { browse_btn.detachInputFile(); }, /** * @access private */ // -------------------------------------------------------------------------------------------- // onWindowRender : function() { this.fsa.postEvent('window-render'); }, onWindowBeforeHide : function() { return this.isUploading() ? this.getAllowCloseOnUpload() : true; }, onWindowHide : function() { this.fsa.postEvent('hide'); }, onWindowDestroy : function() { this.fsa.postEvent('destroy'); }, onGridRender : function() { this.fsa.postEvent('grid-render'); }, onGridSelectionChange : function() { this.fsa.postEvent('grid-selection-change'); }, onAddButtonFileSelected : function(btn) { this.fsa.postEvent('file-selected', btn); }, onUploadButtonClick : function() { if (this.is_uploading) { this.fsa.postEvent('stop-upload'); } else { this.fsa.postEvent('start-upload'); } }, onRemoveButtonClick : function() { var selections = this.grid_panel.getSelectionModel().getSelections(); this.fsa.postEvent('remove-files', selections); }, onResetButtonClick : function() { this.fsa.postEvent('reset-queue'); }, onCloseButtonClick : function() { this[this.closeAction].call(this); }, onAjaxSuccess : function(response, options) { var json_response = { 'success' : false, 'error' : this.i18n.note_upload_error } try { var rt = response.responseText; var filter = rt.match(/^<[^>]+>((?:.|\n)*)<\/[^>]+>$/); if (filter) { rt = filter[1]; } json_response = Ext.util.JSON.decode(rt); } catch (e) {} var data = { record: options.record, response: json_response } if ('success' in json_response && json_response.success) { this.fsa.postEvent('file-upload-success', data); } else { this.fsa.postEvent('file-upload-error', data); } }, onAjaxFailure : function(response, options) { var data = { record : options.record, response : { 'success' : false, 'error' : this.i18n.note_upload_failed } } this.fsa.postEvent('file-upload-failed', data); }, /** * @access public */ // -------------------------------------------------------------------------------------------- // startUpload : function() { this.fsa.postEvent('start-upload'); }, stopUpload : function() { this.fsa.postEvent('stop-upload'); }, getUrl : function() { return this.url; }, setUrl : function(url) { this.url = url; }, getBaseParams : function() { return this.base_params; }, setBaseParams : function(params) { this.base_params = params; }, getUploadAutostart : function() { return this.upload_autostart; }, setUploadAutostart : function(value) { this.upload_autostart = value; }, getAllowCloseOnUpload : function() { return this.allow_close_on_upload; }, setAllowCloseOnUpload : function(value) { this.allow_close_on_upload = value; }, getResetOnHide : function() { return this.reset_on_hide; }, setResetOnHide : function(value) { this.reset_on_hide = value; }, getPermittedExtensions : function() { return this.permitted_extensions; }, setPermittedExtensions : function(value) { this.permitted_extensions = value; }, isUploading : function() { return this.is_uploading; }, isNotEmptyQueue : function() { return this.grid_panel.getStore().getCount() > 0; }, getQueuedCount : function(count_processing) { var count = 0; var store = this.grid_panel.getStore(); store.each(function(r) { if (r.get('state') == Ext.ux.UploadDialog.FileRecord.STATE_QUEUE) { count++; } if (count_processing && r.get('state') == Ext.ux.UploadDialog.FileRecord.STATE_PROCESSING) { count++; } }); return count; }, hasUnuploadedFiles : function() { return this.getQueuedCount() > 0; }, getQueueStore : function() { return this.grid_panel.getStore(); } }); // ---------------------------------------------------------------------------------------------- // var p = Ext.ux.UploadDialog.Dialog.prototype; p.i18n = { title: 'File upload dialog', state_col_title: 'State', state_col_width: 70, filename_col_title: 'Filename', filename_col_width: 230, note_col_title: 'Note', note_col_width: 150, add_btn_text: 'Add', add_btn_tip: 'Add file into upload queue.', remove_btn_text: 'Remove', remove_btn_tip: 'Remove file from upload queue.', reset_btn_text: 'Reset', reset_btn_tip: 'Reset queue.', upload_btn_start_text: 'Upload', upload_btn_stop_text: 'Abort', upload_btn_start_tip: 'Upload queued files to the server.', upload_btn_stop_tip: 'Stop upload.', close_btn_text: 'Close', close_btn_tip: 'Close the dialog.', progress_waiting_text: 'Waiting...', progress_uploading_text: 'Uploading: {0} of {1} files complete.', error_msgbox_title: 'Error', permitted_extensions_join_str: ',', err_file_type_not_permitted: 'Selected file extension isn\'t permitted.<br/>Please select files with following extensions: {1}', note_queued_to_upload: 'Queued for upload.', note_processing: 'Uploading...', note_upload_failed: 'Server is unavailable or internal server error occured.', note_upload_success: 'OK.', note_upload_error: 'Upload error.', note_aborted: 'Aborted by user.', note_canceled: 'Upload canceled' }
发表评论
-
this.form.el is undefined FormPanel或Panel加载数据
2011-03-14 14:35 2980转载: http://www.cyiyuan.com/show ... -
extjs项目整理二
2011-01-09 16:05 1546girdpanel curd /** * viewCon ... -
extjs项目整理一
2011-01-09 15:48 1555viewport /** *一个表示程序可视区域的特殊 ... -
extjs render
2010-10-11 11:27 2062Extjs的renderer关健字可以通过一个方法改变当前绑定 ... -
extjs 应用总结
2010-09-28 00:08 1366从开始接触、运用ExtJS已经有一个月左右的时间了,开始接触时 ...
相关推荐
在IT行业中,网页开发经常会遇到文件上传的需求,而"jSP+EXTJS实现upload UploadDialog"就是一种常见的解决方法。这个话题主要涵盖了两个关键部分:JavaServer Pages (JSP) 和 ExtJS,它们共同用于创建一个具有文件...
3. **上传处理器(Upload Handler)**:EXTJS自身并不直接处理文件的服务器端上传,这部分需要后端支持,如PHP、ASP.NET或Node.js等。服务器端需要接收并处理上传的文件,可能涉及文件验证、存储、重命名等操作。 4...
在给定的"Extjs upload(ext官网例子)"中,我们关注的是一个特定的功能——文件上传。这个例子是基于ExtJS框架的一个组件——FileUploadField,它允许用户在Web页面上选择并上传文件。以下是对这个功能的详细讲解:...
ExtJS 3.x Upload上传组件是基于ExtJS 3.x版本的一个功能强大的文件上传工具,它为Web应用程序提供了用户友好的界面和灵活的文件管理功能。这个组件在Web开发中非常实用,尤其对于需要处理大量文件上传的项目,如...
3. **ExtJS 进度条**: "ExtJS进度条.txt"可能提供了关于如何在上传过程中显示进度信息的代码片段。ExtJS的`Ext.ProgressBar`组件可以用来实时更新文件上传的进度,为用户提供更好的交互体验。 4. **Apache服务器*...
EXTJS3 SWFUpload Panel是一种在EXTJS3框架下实现的多文件上传解决方案。EXTJS是一个流行的JavaScript库,用于构建富客户端应用,而SWFUpload则是一个基于Flash的文件上传插件,它允许用户在不刷新页面的情况下进行...
"JSP extjs upload 上传程序.rar"这个资源正是这样一个示例,它展示了如何在JSP中集成EXTJS 2.2版本来实现文件上传功能。 首先,EXTJS 2.2是EXTJS的一个较早版本,但仍然包含了创建动态、响应式用户界面所需的核心...
Sencha Ext JS的文件上传小部件 ... 'Ext.ux.upload' : '/my/path/to/extjs-upload-widget/lib/upload' }); 基本用法 在最简单的情况下,您只需打开对话框并传递uploadUrl参数: var dialog = Ext.create('Ext.ux.up
标题“extjs3+springMVC上传文件”指的是使用ExtJS 3版本的JavaScript库与Spring MVC框架结合实现文件上传功能。这篇博文可能是作者在ITEYE博客上分享的一个技术实践,遗憾的是,描述部分为空,没有提供额外的信息。...
Struts2和ExtJS3是两个非常流行的开源框架,它们在Web开发中有着广泛的应用。Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,而ExtJS3则是一个用于构建富客户端JavaScript应用的库。本文将...
在本文中,我们将深入探讨如何使用ExtJS 4与Struts2框架实现文件上传功能。ExtJS是一个强大的JavaScript库,提供了丰富的用户界面组件,而Struts2是Java Web开发中的一个MVC框架,用于处理后端业务逻辑。下面,我们...
### Struts2与ExtJS集成实现文件的上传、下载与删除功能详解 #### 一、项目背景与技术栈概述 本案例旨在通过Struts2框架与ExtJS前端库的结合来实现文件的批量上传、下载以及删除功能。适用于对Struts2与ExtJS有...
提到“多文件上传”,在ExtJS4中,可以使用FileInput组件和Upload插件来实现。FileInput组件允许用户选择文件,然后Upload插件可以处理文件上传至服务器的过程。通常,后台需要支持多文件上传的API,接收POST请求,...
3. **Upload Button**: 为了触发文件上传,我们需要一个按钮来启动上传过程。EXTJS提供了一种机制,可以监听按钮的点击事件,并调用相关的处理函数。 4. **Ajax请求**: 文件上传通常通过Ajax异步请求实现,这样可以...
ExtJS4学习笔记(十三)---上传文件(upload) ExtJS4学习笔记(十二)---选项卡(tabs) ExtJS4学习笔记(十五)---Ext.data.Model ExtJS4学习笔记(十六)---Combobox三级联动 ExtJS4学习笔记(十四)--- ComponentQuery ExtJS4...
在EXTJS中,批量上传通常依赖于一个专门的上传组件,例如EXTJS的`Ext.ux.upload.Panel`或第三方插件如`SWFUpload`、`Plupload`等。这些组件通常通过AJAX或者Flash技术实现与服务器的交互,支持多文件选择、进度条...
3. 在Flash中处理文件选择、预览、缩放等操作。 4. 自定义上传参数,如上传地址和按钮文本。 5. Flash与JavaScript之间的通信,包括文件数据的传输和控制指令的传递。 随着HTML5技术的发展,现在更多的文件上传解决...
ExtJS原生多文件拖动上传组件 使用时修改包路径 1.多文件上传 2.支持拖动上传 3.支持图片压缩 4.支持图片合并 5.文件排序 可扩展实时图片预览 api //初始化画板 initCanvas //上传文件窗口 uploadWindow //初始化...
fetch('/upload', { method: 'POST', body: formData }).then(function(response) { // 处理服务器返回的结果 }).catch(function(error) { // 处理错误 }); }); ``` 请注意,以上代码仅为示例,实际应用中...