Показать сообщение отдельно
  #1 (permalink)  
Старый 10.08.2015, 12:23
Новичок на форуме
Отправить личное сообщение для DemFear Посмотреть профиль Найти все сообщения от DemFear
 
Регистрация: 10.08.2015
Сообщений: 3

Extjs стирается внесенное описание при переходе к другому объекту
Всем привет!

Прошу вас помочь мне в одной проблемке.
Реализована возможность изменять описание объекта, но при переходе к следующему объекту внесенное описание стирается и там снова появляется «Текст по умолчанию».
Однако описание сохраняется, когда после ввода текста кликнуть мышкой на пустое поле.

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);
                    }
                }
            }]
        });
    }
       });
Ответить с цитированием