0

我希望任何人都可以帮助我解决这个问题。

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

每棵树都有自己的商店,以及自己的 CRUD api 直接函数。但它们共享相同的模型。 自动同步设置为真。

像这样: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。)

问题是,当我将节点从 LEFT 树移动到 RIHGT 树时,仅调用“update_right”直接函数(仅同步右侧存储,而左侧未同步,即使我从左侧树中删除了一个节点并把它丢在右边的树上)

和类似的,

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

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

我在思考正确的方向吗?

问题#2。)

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

你能告诉我我在这里缺少什么吗?

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

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

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

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

我希望有人可以帮助我解决这个问题,因为我已经搜索了所有互联网,但没有找到有效的示例。

最好的问候,安德烈

4

0 回答 0