如何在Extjs 6.5.2中将新数据动态添加到内存代理存储区?

时间:2017-09-15 07:20:32

标签: extjs

我正在使用Extjs sencha treestore来存储数据。我想在设置内存代理存储后动态添加新记录。我怎么能这样做?

这是我商店的代码:

Ext.define('Test.store.TreeBufferStore', {
extend: 'Ext.data.TreeStore',

alias: 'store.TreeBufferStore',
storeId:'TreeBufferStore',
parentIdProperty: 'parentId',
autoSync:true,
proxy: {
    type: 'memory',
    reader: {
        type: 'json'
    }
}

});

这是我的控制器的代码:

Ext.define('Test.controller.login.LoginController', {
extend: 'Ext.app.ViewController',
alias: 'controller.login',

someButtonClick: function () {

    var treeBufferStore = Ext.getStore('TreeBufferStore');
    var node = [{
        "id": '0',
        "parentId": null,
        "text": "Hello",
        "leaf": record.length == 0 ? true : false
    }];
    treeBufferStore.getProxy().setData(node);// <== It works well 
   console.log(treeBufferStore.getProxy().getData());

   if(num === 1) {
       var childnode = {
           "id": '1',
           "parentId": '0',
           "text": 'World',
           "leaf": true
       };
       treeBufferStore.getProxy().getData().add(childnode); // <== It can not work,how can I do for this?
   }
    treeBufferStore.load();
}

});

我收到treeBufferStore.getProxy()的错误消息.getData()。add()不是函数。 如果有人知道如何解决它。请帮助我!

先谢谢你,Ben

1 个答案:

答案 0 :(得分:0)

  

treeBufferStore.getProxy()。getData()。添加它没有方法添加。它将返回商店中所有数据的数组。

在ExtJs中,docs提供了使用2方法 store.setRoot() store.add()在商店中添加数据的方法。您可以参考ExtJs docs

我已经创建了一个小型演示来向您展示它是如何工作的。 Sencha fiddle example

var store = Ext.create('Ext.data.TreeStore', {
    autoSync: true,
    autoSync: true,
    proxy: {
        type: 'memory',
        reader: {
            type: 'json'
        }
    }
});

Ext.create('Ext.tree.Panel', {
    title: 'Simple Tree',
    width: 200,
    height: 200,
    store: store,
    rootVisible: false,
    renderTo: Ext.getBody()
});
var objectData = {
    expanded: true,
    children: [{
        text: 'detention',
        leaf: true
    }, {
        text: 'homework',
        expanded: true,
        children: [{
            text: 'book report',
            leaf: true
        }, {
            text: 'algebra',
            leaf: true
        }]
    }, {
        text: 'buy lottery tickets',
        leaf: true
    }]
};
store.setRoot(objectData);