Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.03.2010, 14:37
Новичок на форуме
Отправить личное сообщение для altermann Посмотреть профиль Найти все сообщения от altermann
 
Регистрация: 31.03.2010
Сообщений: 8

Окно открывается только один раз
Здравствуйте.

Из примеров extjs 3.1.1 взял рабочий стол и решил сделать в нем подобие моего компьютера.

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

В последующие разы выдает ошибку -
c.getPositionEl().dom is undefined
[Break on this error] return target && c.getPosition...parentNode == (target.dom || target);

Как я понял, у меня при закрытии окна убиваются дочерние компоненты, и их необходимо создавать заново. Вот только не пойму как и что мне сделать.

Данный код при нажатии на ярлык рабочего стола создает новое окно и в качестве итема подгружает файловый менеджер:

MyDesktop.FileManager = Ext.extend(Ext.app.Module, {
    id:'FileManager-win',
    init : function(){
        this.launcher = {
            text: 'Мой компьютер',
            iconCls:'tabs',
            handler : this.createWindow,
            scope: this
        }
    },

    createWindow : function(){
        var desktop = this.app.getDesktop();
        var win = desktop.getWindow('FileManager-win');
        if(!win){
            win = desktop.createWindow({
                id: 'FileManager-win',
                title:'Мой компьютер',
                width:800,
                height:500,
                iconCls: 'tabs',
                shim:false,
                animCollapse:false,
                border:false,
                constrainHeader:true,
                layout: 'fit',
                items: FileManager
            });
        }
        win.show();
    }
});




Собственно, сам файловый менеджер:

Пробовал я, как видно по комментам, создавать и отдельный компонент, но все равно не помогает....

//Ext.ns('Ext.ux');

		Ext.QuickTips.init();
		Ext.form.Field.prototype.msgTarget = 'side';
// Setup a variable for the current directory
		var current_directory = '';
		var tree = new Ext.tree.TreePanel ({
			autoScroll: true,
			animate: true,
			containerScroll: true,
			border: false,
			enableDD: true,
			ddGroup : 'fileMove',
			loader: new Ext.tree.TreeLoader({
				dataUrl: '/core/modules/FileManager/tree-data.json.php'
			}),
			
					root: new Ext.tree.AsyncTreeNode({
						text: 'Файлы',
						draggable: false,
						id: 'source',
						expanded: true
					}),
					listeners: {
						'click': function(node, e) {
							current_directory = node.attributes.url;
							ds.load({
								params: {directory: node.attributes.url},
								callback: do_buttons
							});
						},
						'contextmenu': function(node, e) {
							node.select();
							context_menu.node = node;
							context_menu.show(e.getTarget());
						},
						'beforenodedrop': do_move
					} 
				});
			
//Add a tree sorter in folder mode
new Ext.tree.TreeSorter(tree, {folderSort: true});

var context_menu = new Ext.menu.Menu({
	id: 'context_menu',
	items: [{
		text: 'Новая папка',
		iconCls: 'new_directory_button',
		handler: do_new_directory
	},{
		text: 'Переименовать',
		iconCls: 'rename_directory_button',
		handler: do_rename_directory
	},{
		text: 'Права доступа',
		iconCls: 'chmod_directory_button',
		handler: do_chmod_directory
	},{
		text: 'Удалить',
		iconCls: 'delete_directory_button',
		handler: do_delete_directory
	}]
});
		/* ---- Begin grid --- */
		var ds = new Ext.data.GroupingStore({
			
			url: '/core/modules/FileManager/actions.php',
			method: 'POST',
			autoLoad: true,
			sortInfo: {field: 'name', direction: 'ASC'},
			reader: new Ext.data.JsonReader({
				root: 'data',
				totalProperty: 'count'
			},[
				{name: 'name'},
				{name: 'size'},
				{name: 'type'},
				{name: 'permissions'},
				{name: 'ctime', type: 'date', dateFormat: 'timestamp'},
				{name: 'mtime', type: 'date', dateFormat: 'timestamp'},
				{name: 'owner'},
				{name: 'group'},
				{name: 'relative_path'},
				{name: 'full_path'},
				{name: 'web_path'}
			])
			
		});
		
		
		var cm = new Ext.grid.ColumnModel({
			defaults: {
				sortable: true
			},
			columns: [
				{header: 'Name', dataIndex: 'name'},
				{header: 'Size', dataIndex: 'size', renderer: Ext.util.Format.fileSize},
				{header: 'Type', dataIndex: 'type'},
				{header: 'Permissions', dataIndex: 'permissions'},
				{header: 'Created', dataIndex: 'ctime', renderer: Ext.util.Format.dateRenderer('Y-m-d H:i:s')},
				{header: 'Modified', dataIndex: 'mtime', renderer: Ext.util.Format.dateRenderer('Y-m-d H:i:s')},
				{header: 'Owner', dataIndex: 'owner'},
				{header: 'Group', dataIndex: 'group'},
				{header: 'Relative Path', dataIndex: 'relative_path', hidden: true},
				{header: 'Full Path', dataIndex: 'full_path', hidden: true},
				{header: 'Web Path', dataIndex: 'web_path', hidden: true}
			]
		});
                
                var grid = new Ext.grid.GridPanel({
			anchor: '0 100%',
			border: false,
			enableDrag: true,
			ddGroup : 'fileMove',
			view: new Ext.grid.GroupingView({
				emptyText: 'This folder contains no files.',
				forceFit: true,
				showGroupName: false,
				enableNoGroups: true
			}),
			ds: ds,
			cm: cm,
			listeners: {
				'rowClick': function () {
					do_buttons();
				},
				'rowcontextmenu': function(grid, rowIndex, e) {
					
								filecontextMenu.show(e.getTarget());
								e.stopEvent(); 
				}
			}
		});
		/* ---- End grid --- */
		
                var filecontextMenu = new Ext.menu.Menu({ 
                    id:'filecontextMenu', 
                    items:[
               					{
            						id: 'edit_button',
            						text: 'Редактировать',
            						tooltip: 'Редактировать файл',
            						iconCls: 'edit_button',
            						disabled: true,
            						handler: do_edit_file
            					},{
            						id: 'proper_button',
            						text: 'Свойства',
            						tooltip: 'Свойства файла',
            						iconCls: 'proper_button',
            						disabled: true,
            						handler: do_proper
            					},{
            						id: 'download_button',
            						text: 'Скачать',
            						tooltip: 'Download Selected File',
            						iconCls: 'download_button',
            						disabled: true,
            						handler: do_download
            					},{
            						id: 'rename_button',
            						text: 'Переименовать',
            						tooltip: 'Rename Selected File',
            						iconCls: 'rename_button',
            						disabled: true,
            						handler: do_rename
            					},{
            						id: 'chmod_button',
            						text: 'Права доступа',
            						tooltip: 'Chmod Selected File',
            						iconCls: 'chmod_button',
            						disabled: true,
            						handler: do_chmod
            					},{
            						id: 'delete_button',
            						text: 'Удалить',
            						tooltip: 'Delete Selected File',
            						iconCls: 'delete_button',
            						disabled: true,
            						handler: do_delete
            					}] 
				}); 
	
           

//Ext.ux.FileManager = Ext.extend(Ext.Container ,{
var FileManager = new Ext.Container ({
	xtype:"container",
	//width:800,
	//height:500,
        //headerAsText:false,
      layout:"border",
	//initComponent: function(){
      items:[
      //this.items=[
			{
				region: 'west',
				border: false,
				split: true,
				collapseMode: 'mini',
				width: 200,
				items: tree
			},{
				region: 'center',
				layout: 'anchor',
				border: false,
				tbar: new Ext.ux.StatusBar({
					id: 'status-bar',
					statusAlign: 'right',
					items: [
					{
						id: 'new_button',
						text: 'Создать',
						tooltip: 'Create New File',
						iconCls: 'new_button',
						handler: do_new
					},{
						id: 'upload_button',
						text: 'Загрузить',
						tooltip: 'Upload New File',
						iconCls: 'upload_button',
						handler: do_upload
					},'-']
				
				}),
				items: grid
			}],
			//Ext.ux.FileManager.superclass.initComponent.call(this);
			//}
			});

		// Описание функций


               // Конец описания функций

//Ext.reg('FileManager', Ext.ux.FileManager);



Может кто знает, что можно придумать? И с чем это вообще связано.

Спасибо
Ответить с цитированием
  #2 (permalink)  
Старый 02.04.2010, 06:05
Интересующийся
Отправить личное сообщение для risfek Посмотреть профиль Найти все сообщения от risfek
 
Регистрация: 21.01.2010
Сообщений: 12

может окно стоит скрывать а не закрывать ?
closable:true,
closeAction:'hide',
Ответить с цитированием
  #3 (permalink)  
Старый 02.04.2010, 14:40
Новичок на форуме
Отправить личное сообщение для altermann Посмотреть профиль Найти все сообщения от altermann
 
Регистрация: 31.03.2010
Сообщений: 8

пробовал, тогда окно скрывается, но остается в панели задач )) типа сворачивается, а это не выход
Ответить с цитированием
  #4 (permalink)  
Старый 05.04.2010, 17:10
Аватар для scuter
Профессор
Отправить личное сообщение для scuter Посмотреть профиль Найти все сообщения от scuter
 
Регистрация: 14.03.2008
Сообщений: 169

попробуй сделать так,
createWindow : function(){
        var desktop = this.app.getDesktop();
        var win = desktop.getWindow('FileManager-win');
        if(!win){
            win = desktop.createWindow({
                id: 'FileManager-win',
                title:'Мой компьютер',
                width:800,
                height:500,
                iconCls: 'tabs',
                shim:false,
                animCollapse:false,
                border:false,
                constrainHeader:true,
                layout: 'fit',
                items: FileManager
            });
            this.FileManagerWin = win;
        }
        this.FileManagerWin.show();
    }
Ответить с цитированием
  #5 (permalink)  
Старый 05.04.2010, 17:34
Новичок на форуме
Отправить личное сообщение для altermann Посмотреть профиль Найти все сообщения от altermann
 
Регистрация: 31.03.2010
Сообщений: 8

Не прокатило.... то же результат =(
Ответить с цитированием
  #6 (permalink)  
Старый 05.04.2010, 19:35
Аватар для scuter
Профессор
Отправить личное сообщение для scuter Посмотреть профиль Найти все сообщения от scuter
 
Регистрация: 14.03.2008
Сообщений: 169

значит бери фаерфокс+фаербаг,
смотри ошибки, DOM.
Ответить с цитированием
  #7 (permalink)  
Старый 06.04.2010, 08:56
Новичок на форуме
Отправить личное сообщение для altermann Посмотреть профиль Найти все сообщения от altermann
 
Регистрация: 31.03.2010
Сообщений: 8

этим и пользуюсь =))
выдает мне:

c.getPositionEl().dom is undefined
[Break on this error] return target && c.getPosition...parentNode == (target.dom || target);

А как и где дальше смотреть - хз...
Ответить с цитированием
  #8 (permalink)  
Старый 16.04.2010, 23:07
Новичок на форуме
Отправить личное сообщение для altermann Посмотреть профиль Найти все сообщения от altermann
 
Регистрация: 31.03.2010
Сообщений: 8

Тема все еще актуальна....

Неужели никто не сталкивался с таким?
Ответить с цитированием
  #9 (permalink)  
Старый 22.04.2010, 11:55
Ламер
Отправить личное сообщение для DooMer Посмотреть профиль Найти все сообщения от DooMer
 
Регистрация: 19.02.2010
Сообщений: 295

createWindow : function(){
        var desktop = this.app.getDesktop();
        var win = desktop.getWindow('FileManager-win');
        if(!win){
            win = desktop.createWindow({
                id: 'FileManager-win',
                title:'Мой компьютер',
                width:800,
                height:500,
                iconCls: 'tabs',
                shim:false,
                animCollapse:false,
                border:false,
                constrainHeader:true,
                layout: 'fit',
                items: [
                   Ext.extend(Ext.app.Module, {
                   id:'FileManager-win',
                   init : function(){
                   this.launcher = {
                       text: 'Мой компьютер',
                       iconCls:'tabs',
                       handler : this.createWindow,
                       scope: this
                   }
                  }
               ]
            });
        }
        win.show();
    }
});

гдето так будет работь. Т.е. все итемы обьекты надо создавать сразу внутри окна
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтоб ссылка появлялась один раз для каждого пользователя (по IP или Cookies) Sequoia Общие вопросы Javascript 2 28.01.2010 19:16
Выделить группу чекбоксов. В группе может быть только один чекбокс. JooZ Элементы интерфейса 2 23.12.2009 19:28
Спойлер работает только на один объект на странице. Shanks Общие вопросы Javascript 4 10.05.2009 14:53
Как узнать свернуто окно браузера или нет. bar-boss Events/DOM/Window 3 25.09.2008 16:09