EXTJS4 - 使用Ext.Direct代理在两个树之间拖放 - 问题

时间:2013-09-24 10:22:15

标签: javascript extjs drag-and-drop tree

我希望有人能帮助我解决这个问题。

我有2棵树。一个在左边,一个在右边。

每棵树都有自己的商店,并且有自己的CRUD api直接功能。但他们拥有相同的模式。 AutoSync 设置为true。

像这样:http://extjs.dev.abteam.si/index.html

以下是代码:

Ext.define('Model', {
    extend: 'Ext.data.Model',
    fields: [{
        name: 'text',
        type: 'string'
    }, {
        name: 'index',
        type: 'int'
    }, {
        name: 'id',
        type: 'int'
    }, {
        name: 'parentId',
        type: 'int'
    }]
});

Ext.define('Store_left', {
    extend: 'Ext.data.TreeStore',
    model: 'Model',
    root: {
        text: 'Root',
        id: 0,
        expanded: true
    },
    proxy: {
        type: 'direct',
        api: {
           create: TestAction.create_left,
           read: TestAction.read_left,
           update: TestAction.update_left,
           destroy: TestAction.destroy_left
        },
        reader: {
            type: 'json',
            idProperty: 'id'
        }
    },
    autoLoad: true,
    autoSync: true
});

Ext.define('Store_right', {
    extend: 'Ext.data.TreeStore',
    model: 'Model',
    root: {
        text: 'Root',
        id: 0,
        expanded: true
    },
    proxy: {
        type: 'direct',
        api: {
           create: TestAction.create_right,
           read: TestAction.read_right,
           update: TestAction.update_right,
           destroy: TestAction.destroy_right
        },
        reader: {
            type: 'json',
            idProperty: 'id'
        }
    },
    autoLoad: true,
    autoSync: true
});

Ext.onReady(function () {
    new Ext.panel.Panel({
        renderTo: Ext.getBody(),
        width: 700,
        height: 500,
        layout: {
            type: 'hbox',
            align: 'stretch'
        },
        defaultType: 'treepanel',
        defaults: {
            rootVisible: false,
            flex: 1
        },
        items: [{
            title: 'Left tree',
            store: Ext.create('Store_left'),
            viewConfig: {
                plugins: {
                    ptype: 'treeviewdragdrop',
                }
            }
        }, {
            title: 'Right tree',
            store: Ext.create('Store_right'),
            viewConfig: {
                plugins: {
                    ptype: 'treeviewdragdrop'
                }
            }
        }]
    });
});

问题#1。)

问题是,当我将节点从左侧树移动到RIHGT树时,只有" update_right"直接函数被调用(只有正确的存储被同步,并且左边没有被同步,即使我从左侧树中删除了一个节点并将其放在右侧的树中)

和类似的,

当我将节点从右树移动到左侧树时,只有左侧存储被同步。更重要的是,在左边的树上"更新"调用API而不是"创建"。

我想要的是,当我将节点从左侧树移动到右侧树时,我希望调用destroy_left API,然后调用create_right API函数(因为我从左侧存储中删除了节点并添加了它到正确的商店)。

我在思考正确的方向吗?

问题#2。)

如果我在同一个树中重新排序节点(比如说RIGHT树),则使用完整树作为数据参数调用update_right API。我希望只有2个节点将被发送到服务器 - 更改位置的节点(索引属性)。

你能否告诉我这里缺少什么。

为什么所有节点都被标记为"脏"并发送到服务器,不仅更改节点?

我准备了简单的例子。我必须告诉你,在服务器端更新销毁和创建函数没有实现,但这对测试并不重要,因为你可以尝试打开firebug并查看调用哪些服务器函数。始终只调用更新,永不销毁或创建。

示例网址:http://extjs.dev.abteam.si/index.html

我想在两个(或更多)树之间实现拖放。

我希望有人可以帮助我解决这个问题,因为我搜索了所有互联网,而且我找不到合适的例子。

最好的问候, 安德烈

0 个答案:

没有答案