【问题标题】:How to insert new record ( model ) in TreePanel?如何在 TreePanel 中插入新记录(模型)?
【发布时间】:2011-09-01 00:56:52
【问题描述】:

我使用TreeStoreTreePanel。我需要在我的 Tree 中插入新节点,该怎么做?

我有TreeStore 组件,它遵循配置:

var monPrestore = Ext.create('Ext.data.TreeStore', {
    folderSort : true,
    model : 'Task',
    proxy : {
        model : 'Task',
        appendId: true,
        type : 'ajax',
        url : '/intranet-timesheet2-tasks-extjs/getJSON.tcl',
        reader : {
            type : 'json'
        },
        writer : {
            type : 'json'
        },
    }

我已经用空白值定义了任务模型(这是我要插入的):

Ext.define('Task', {
    extend : 'Ext.data.Model',
    fields : [
        {
            name : 'task',
            type: 'string'
        },
        {
            name : 'material',
            type: 'string'
        },
        {
            name : 'cc',
            type: 'string'
        },
        {
            name : 'start_date',
            type: 'string'
        },
        {
            name : 'short_desc',
            type: 'string'
        },
        {
            name : 'id',
            type: 'string'
        }
    ]
});

我想在事件itemdlclick 被触发时插入新记录:

我已经测试过了,但它不起作用:

itemdblclick: function(view, model, htmlitem, index, e) {
    var task = {
        task: 't0',
        material: 'm0',
        cc: 'c0',
        start_date: '12',
        short_desc: 'sht',
        id: '120',
        leaf: true
    };

    monPretree.insert(4,task);          
}

非常感谢:)!

【问题讨论】:

    标签: tree store extjs4


    【解决方案1】:

    我想你问过类似的问题here

    树形面板没有插入方法。您必须获取树的根节点才能修改树。在您的情况下,您可能必须执行以下操作:

    var rootNode = monPretree.getRootNode();
    rootNode.insertChild(4,task); 
    

    其他树操作方法请参考NodeInterface的API文档。

    【讨论】:

    • 哦,是的,我没有看到我的主题!我明白了,你的示范。但是如果我想在一片叶子之后插入我的新问题?不知道有没有可能?当我双击叶子时,我需要添加。使用 dblclick 事件我有参数 'index' ,我想在 index+1 处添加
    • 你一定是在开玩笑吧!!如果可以添加子节点,为什么要制作节点叶子?好的,现在如果您坚持需要这种方式,则必须删除现有节点,创建一个新的父节点并将您的子节点插入其中。
    • 不,我不是在开玩笑……!很抱歉,我的情况是,当我在项目上单击 dlbclick(没有叶子)时添加叶子是成功的,但现在我需要在单击同一级别的叶子时添加叶子。当它是叶子而不是叶子时,行为不一样吗?我在文档中看到,有替换叶子的方法!很抱歉,如果我不明白你...
    • 那么这是您唯一的选择.. 删除节点并创建一个新节点及其子节点。所以,使用 remove、insertChild 和 appendChild
    • 我已经解决了我的问题:var papa = node.parentNode; var rechild = papa.insertBefore( { task : '', material : '', cc : '', start_date : '', short_desc : 'description', id : '', leaf : true },node); var renode = papa.replaceChild(rechild,node); var test = papa.insertBefore(renode,rechild);
    猜你喜欢
    • 1970-01-01
    • 2014-11-14
    • 2019-06-23
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多