проблема с ООП
всем здравствуйте,
я не как не могу решить такую задачу, обьявляется такой обьект, Ext.onReady(function(){ ...... }); в тем есть различные функции, мне надо создать такую функцию которая будет, меня те функции которые обьявлены. проблема заключается в том что те переменные которые были обьявлены например var top; |
scuter, уважаемый, я ннниче не понял! =) Одно вижу - Вы используете фреймворк Ext (больше ничего не понял из Вашего "вопроса")
Цитата:
Цитата:
Цитата:
P.S.: ну видите, что написали с опечатками и ошибками - можно же исправить, чтобы люди Вас понимали? Можно же внятно задавать вопросы? |
Омг, сломал мозг пока читал вопрос.
|
ОК попробую по помятней.
есть такое скрипт Ext.onReady(function(){ var TreeNode = function(node) { node = tree.getSelectionModel().getSelectedNode(); alert(node.text); } var tree = new Ext.tree.TreePanel({ region:'west', split:true, tbar: TreeToolbar, collapsible: true, width:200, minWidth: 150, maxWidth: 350, border: false, title: 'меню сайта', margins: '1 0 0 0', cmargins: '0 0 0 0', enableRename: true, autoScroll:true, animate:false, enableDD:true, rootVisible:false, containerScroll: true, loader: new Ext.tree.TreeLoader({ preloadChildren: true, dataUrl:this.TreeNodeUrl, clearOnLoad: false }), root: new Ext.tree.AsyncTreeNode({ text: 'меню сайта', draggable:false, id:'www' }) }); }); var page = new (function(){ this.TreeNode = function() { node = tree.getSelectionModel().getSelectedNode(); alert(node.id); } })(); мне надо заменить функцию TreeNode которая находится в Ext.onReady на функцию TreeNode которая находится в page |
Цитата:
|
большое спасибо.
но к сожалению проблема оказывается не в этом, вот напимер функция var TreePanetEdit = function(bottom) { var node; if((bottom == 'Add') || (bottom == 'AddChild')) { if(isset(tree)) { node = tree.getSelectionModel().getSelectedNode(); if(bottom == 'Add') { dnode = node; } else { dnode = node.parentNode; } node = TreeNodeAdd(dnode); if(node.add) { node = new Ext.tree.TreeNode(node.add); dnode.appendChild(node); } } } else if(bottom == 'TreeNodeUp') { } else if(bottom == 'TreeNodeDown') { } else if(bottom == 'TreeNodeDelete') { } if(isset('node.error')) { if(isset('node.error.title') && isset('node.error.text')) { Ext.MessageBox.show({ title: node.error.title, msg: node.error.text, buttons: Ext.MessageBox.OK, icon: 'error' }); } } else if(isset(node.msg)) { if(node.msg.title && node.msg.text) { Ext.MessageBox.show({ title: node.msg.title, msg: node.msg.text, buttons: Ext.MessageBox.OK, icon: 'info' }); } } } пробовал по разному и через функцию isset которая у вас в анологии php и просто if(node.error), но вот хоть ты тресни,а переменной node не существует и всё тут все броузеры боворят плевать нам на if не существует и всё тут. |
А с чего вы взяли, что в JavaScript есть функция isset?
|
scuter, дружище! Небольшой совет: не нужно приводить лишний большой код, который неинтересен для анализа. Попробуй локализовать проблему. Переменная node у тебя локальная и определяется только при условии if((bottom == 'Add') || (bottom == 'AddChild')). Значит надо смотреть, почему button не равен ни одному из этих значений. Попробуй продебажить это, расставив alert'ы во всех вызовах.
scuter, функции isset(...), действительно не существует в JS. Однако, Kolyaj, я полагаю, что автор описал ее сам (что-то вроде: var isset = function(obj) { return typeof obj !== 'undefined' };). |
Цитата:
извените я просто не могу найти проблему создаю функцию, а она запускается в момент её инициализации, то есть пишу так var TreePanetEdit = function(box) { if(box) { alert(box); } else { alert('nexus'); } } и функция запускается когда объявляется, а когда используешь эту функцию она ничего не хочет делать, например если сделать так, TreePanetEdit('it is work'); может я её как то не так объявил? |
В последнем примере всё объявлено правильно. Может ты опять объявил её с инкапсуляцией и "вызовом при объявлении", как в первом примере? Т.е вот так:
var TreePanetEdit = new (function(box) { if(box) { alert(box); } else { alert('nexus'); } })(); if(isset('node.error')) { if(isset('node.error.title') && isset('node.error.text')) И в этом месте, как я понимаю, не нужно ставить кавычки, так как проверяется по самому элементу, а не по его имени. |
Цитата:
|
да нет написал так как в последнем примере,
а isset использовал потому, что не мог понять почему не if(node.error) не срабатывает, а оказалось такая конитель. кстати в IE 6 что то не срабатывает у вас на форуме, толи стили не подгружаются толи с js какой то косяк. |
Цитата:
|
scuter,
Если еще осталась проблема, пожалуйста, опиши её максимально подробно, так как сейчас - ничего не понятно. |
я её максимально понятно описал,
остаётся только код полностью выложить(но он слишком большой для этого), Андрей Параничев, ты наверное прав ext наверное запускается в этом режиме так как функцию я объявляю внутри Ext.onReady примерно так, Ext.onReady(function(){ var TreePanetEdit = function(box) { if(box) { alert(box); } else { alert('nexus'); } } }); |
Так, давайте по порядку :)
Что вы хотите, просто заменить функцию onReady объекта/класса Ext? Или хотите чтоб в коде Ext.onReady(function(){ var TreePanetEdit = function(box) { if(box) { alert(box); } else { alert('nexus'); } } }); Функцию TreePanetEdit можно было запускать откуда угодно? Я просто не знаю как сделан код Ext (вряд ли с полной инкапсуляцией), в любом случае достаточно, чтобы функция при onLoad видела другие функции, так как весь исполнительный код помещать в событие onLoad не обязательно - только вызов определённых методов. Или я опять неправильно вас понял? :) |
у сейчас там есть такой код,
Ext.onReady(function(){ var TreeNodeAdd = page.TreeNodeAdd; var TreeNodeMove = page.TreeNodeMove; var TreeNodeRename = page.TreeNodeRename; var TreeNodeDelete = page.TreeNodeDelete var TreeNodeBeforeStartEdit = page.TreeNodeBeforeStartEdit; var TreeNodeUrl = page.TreeNodeUrl; var TabAdd = page.TabAdd; var TreePanetEdit = function(bottom) { if((bottom == 'Add') || (bottom == 'AddChild')) { NodeSelect = tree.getSelectionModel().getSelectedNode(); if(bottom == 'Add') { NodeEdit = NodeSelect; } else { NodeEdit = NodeSelect.parentNode; } node = NodeChild = TreeNodeAdd(NodeEdit); if(NodeChild.add) { Child = new Ext.tree.TreeNode(NodeChild.add); NodeEdit.appendChild(Child); } } else if(bottom == 'TreeNodeUp') { node = TreeNodeMove('Up'); if(!node.error) { tree.loader.load(tree.root); } } else if(bottom == 'TreeNodeDown') { node = TreeNodeMove('Down'); if(!node.error) { tree.loader.load(tree.root); } } else if(bottom == 'TreeNodeDelete') { node = tree.getSelectionModel().getSelectedNode(); node = TreeNodeDelete(node); if(!node.error) { tree.loader.load(tree.root); } } if(node) { if(node.error) { if(isset('node.error.title') && isset('node.error.text')) { Ext.MessageBox.show({ title: node.error.title, msg: node.error.text, buttons: Ext.MessageBox.OK, icon: 'error' }); } } else if(node.msg) { if(node.msg.title && node.msg.text) { Ext.MessageBox.show({ title: node.msg.title, msg: node.msg.text, buttons: Ext.MessageBox.OK, icon: 'info' }); } } } } var TreeToolbar = new Ext.Toolbar({ cls:'TreeToolbar', items:[ { id:'add', iconCls:'add', handler:function(){TreePanetEdit('Add');}, tooltip:'Добавить сраницу.' }, { id:'add_p', iconCls:'plugin_add', handler:function(){TreePanetEdit('AddChild')}, tooltip:'Добавить подстраницу.' },'-',{ id:'up', iconCls:'arrow-up', handler:function(){TreePanetEdit('TreeNodeUp')}, tooltip:'переместить выше.' },{ id:'down', iconCls:'arrow-down', handler:function(){TreePanetEdit('TreeNodeDown')}, tooltip:'переместить ниже.' },'-',{ id:'remove', iconCls:'delete', handler:function(){TreePanetEdit('TreeNodeDelete')}, tooltip:'Удалить страницу' } ] }); var TreeToolbarMap = TreeToolbar.items.map; }); var page = new (function(){ this.TreeNodeAdd = function() { } this.TreeNodeUp = function() { } this.TreeNodeDown = function() { } this.TreeNodeRename = function() { } this.TreeNodeDelete = function() { } this.TreeReplace = function() { } this.TreeNodeBeforeStartEdit = function() { } this.TreeNodeUrl = '/admin/src/page_tree_menu:content'; this.TabAdd = function() { } })(); раньше когда я перекидывал функции из page в onReady функции не видели переменных которые были в onReady пока возился приключился косяк функции начали выполняться один раз при запуску а потом не использовались, но это дело я обошёл только вот не понял почему надо писать так handler:function(){TreePanetEdit('Add');}, |
хм, кажется все таки непонятно объяснил,
есть два объекта, Ext.onReady(function(){ var table = 'kjsfdgjkdjfh'; var TreeNodeAdd = page.TreeNodeAdd; var TreeNodeMove = page.TreeNodeMove; var TreeNodeRename = page.TreeNodeRename; var TreeNodeDelete = page.TreeNodeDelete var TreeNodeBeforeStartEdit = page.TreeNodeBeforeStartEdit; var TreeNodeUrl = page.TreeNodeUrl; var TabAdd = page.TabAdd; }); var page = new (function(){ this.TreeNodeAdd = function() { alert(table); } this.TreeNodeUp = function() { } this.TreeNodeDown = function() { } this.TreeNodeRename = function() { } this.TreeNodeDelete = function() { } this.TreeReplace = function() { } ...... })(); ну тук вот я не понимаю почему функция не видит переменную table, скажите как сделать так, что бы видела. |
Ext.onReady(function(){ table = 'kjsfdgjkdjfh'; var TreeNodeAdd = page.TreeNodeAdd; var TreeNodeMove = page.TreeNodeMove; var TreeNodeRename = page.TreeNodeRename; var TreeNodeDelete = page.TreeNodeDelete var TreeNodeBeforeStartEdit = page.TreeNodeBeforeStartEdit; var TreeNodeUrl = page.TreeNodeUrl; var TabAdd = page.TabAdd; }); var page = new (function(){ this.TreeNodeAdd = function() { alert(table); } this.TreeNodeUp = function() { } this.TreeNodeDown = function() { } this.TreeNodeRename = function() { } this.TreeNodeDelete = function() { } this.TreeReplace = function() { } ...... })(); |
Андрей Параничев,
это шутка? |
Часовой пояс GMT +3, время: 14:57. |