Всем привет!
Прошу вас помочь мне в одной проблемке.
Реализована возможность изменять описание объекта, но при переходе к следующему объекту внесенное описание стирается и там снова появляется «Текст по умолчанию».
Однако описание сохраняется, когда после ввода текста кликнуть мышкой на пустое поле.
MyNode = Ext.extend(Ext.tree.TreeNode, {
consructor: function (attributes) {
var description = attributes.description || '';
MyNode.superclass.constructor.call(this, attributes);
},
setDescription: function (newDescription) {
this.attributes.description = newDescription;
}
});
Ext.onReady(function () {
var tree;
var width = 200;
var height = 300;
var offsetX = 0;
var offsetY = 0;
var treeTitle = 'Дерево';
function showTree() {
tree = Ext.getCmp(treeTitle);
if (!tree) {
tree = Window(width, height, offsetX, offsetY, treeTitle, Tree(height, width));
}
tree.show();
}
var button = new Ext.Button({
text: 'Задание',
renderTo: document.body,
handler: showTree
});
function Window(xWidth, xHeight, offsetX, offsetY, xTitle, filling) {
return new Ext.Window({
renderTo: document.body,
title: xTitle,
id: xTitle,
draggable: false,
resizable: false,
width: xWidth,
height: xHeight,
closeAction: 'hide',
y: offsetY,
x: offsetX,
items: filling
});
}
function Tree(xHeight, xWidth) {
return new Ext.tree.TreePanel({
rootVisible: true,
root: new MyNode({
text: 'Корень',
description: 'Введите текст',
dragable: false,
expanded: true
}),
contextMenu: new Ext.menu.Menu({
items: [{
id: 'delete-node',
text: 'Удалить объект'
}, {
id: 'add-node',
text: 'Добавить объект'
}],
listeners: {
itemclick: function (item) {
var curNode;
curNode = item.parentMenu.contextNode;
switch (item.id) {
case 'delete-node':
if (curNode.parentNode) {
curNode.remove(true);
} else {
Ext.Msg.alert('Внимание', 'Удаление корневого элемента запрещено!');
}
break;
case 'add-node':
curNode.appendChild(new MyNode({
text: 'Объект',
dragable: false,
expanded: true,
description: 'Введите текст'
}));
break;
}
}
}
}),
listeners: {
contextmenu: function (node, e) {
node.select();
var c = node.getOwnerTree().contextMenu;
c.contextNode = node;
c.showAt(e.getXY());
},
click: function (node, e) {
var formView = Ext.getCmp('Свойства');
if (formView) formView.close();
var formData = form(xHeight - 60, xHeight - 140, node);
formView = Window(xHeight, xHeight, xWidth, 0, 'Свойства', formData);
formView.show();
}
}
});
}
function form(xWidth, xHeight, node) {
return new Ext.FormPanel({
renderTo: Ext.getCmp(),
padding: 20,
labelAlign: 'top',
items: [{
xtype: 'textfield',
fieldLabel: 'Название',
value: node.attributes.text,
width: xWidth,
listeners: {
change: function (element, newV, oldV) {
node.setText(newV);
}
}
}, {
xtype: 'textarea',
fieldLabel: 'Описание',
value: node.attributes.description,
width: xWidth,
height: xHeight,
listeners: {
change: function (element, newV, oldV) {
node.setDescription(newV);
}
}
}]
});
}
});