Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Extjs стирается внесенное описание при переходе к другому объекту (https://javascript.ru/forum/extjs/57578-extjs-stiraetsya-vnesennoe-opisanie-pri-perekhode-k-drugomu-obektu.html)

DemFear 10.08.2015 12:23

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);
                    }
                }
            }]
        });
    }
       });

khusamov 10.08.2015 15:53

Вы можете все это в песочницу вогнать?

khusamov 10.08.2015 15:54

хмм... у вас что, версия Ext 3.x?

DemFear 10.08.2015 16:27

Да версия 3.4.0.
По поводу загнать в песочницу не совсем понимаю. я просто начинающий программист. Тем более в js.

khusamov 10.08.2015 16:34

Цитата:

По поводу загнать в песочницу не совсем понимаю.
Вот песочница https://fiddle.sencha.com/#home

там и для третьей версии есть, так что можно и ваш пример туда загнать


Цитата:

я просто начинающий программист.
Странно. Если вы недавно начали использовать Ext, то по идее должны использовать последнюю версию. Шестую.

Если вы давно уже используете, то такие проблем не должно быть.

Можете объяснить, как так вышло, что в работе используете трешку?

DemFear 10.08.2015 16:40

Задание от работодателя использовать именно эту версию.)
Спасибо за ответ.


Часовой пояс GMT +3, время: 02:22.