проблема с ООП
всем здравствуйте,
я не как не могу решить такую задачу, обьявляется такой обьект,
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, время: 07:53. |