如何“持久”地向ExtJS商店添加记录?

时间:2014-03-10 21:20:42

标签: javascript extjs crud

有两个具有相同型号的商店: inputStore outputStore Concepts 面板中的网格显示来自 inputsStore 的数据。 当用户复选该网格中的一行(通过Ext.selection.Checkbox.Model)时,该记录将添加到 outputStore 中。

我设法做到了,但无法将记录持久添加到 outputStore 。我是这样做的:

我在Ext.selection.Checkbox.Model中添加了一个监听器,它是网格的一部分:

selModel: Ext.create('Ext.selection.CheckboxModel', {
listeners: {
    select: {
        fn: me.onCheckboxModelSelect,
        scope: me
    }
}
})

然后将记录添加到 outputStore ,它可以正常工作。

onCheckboxModelSelect: function(rowmodel, record, index, eOpts) {
    var griddd = Ext.ComponentQuery.query('#outputGridPanel')[0];
    griddd.getStore().add(record);
}

我已经尝试了 Store.sync() Store.commitChanges() Store.save()

嗨回来!将内联数据存储中的两个商店更改为带代理的json商店。例如,这里是 outputStore

Ext.define('justConcepts.store.outputStore', {
extend: 'Ext.data.Store',

requires: [
    'justConcepts.model.ConceptsModel',
    'Ext.data.proxy.Ajax',
    'Ext.data.reader.Json'
],

constructor: function(cfg) {
    var me = this;
    cfg = cfg || {};
    me.callParent([Ext.apply({
        autoLoad: true,
        autoSync: true,
        model: 'justConcepts.model.ConceptsModel',
        storeId: 'outputStore',
        proxy: {
            type: 'ajax',
            url: 'data/output.json',
            reader: {
                type: 'json',
                root: 'concepts'
            }
        }
    }, cfg)]);
}
});

这是 data / output.json 文件:

{
concepts: [
    {  
      "id": "00A212",  
      "name": "Pays",  
      "adjacencies": ["00A213", "01A455"]  
    },
    {  
      "id": "00A213",  
      "name": "Ville",  
      "adjacencies": ["00A212"]  
    },  
    {  
      "id": "01A455",  
      "name": "Fleuve", 
      "adjacencies": ["00A212"]  
    } 
]
}

griddd.getStore()。add(record); 仍在工作,但无法持久, griddd.getStore()。getProxy()。getModel()。save(); < / em>不工作。

1 个答案:

答案 0 :(得分:0)

您的问题可能出在模型定义中。

你试过了吗?

griddd.getStore().getProxy().getModel().save();

顺便说一句Ext.data.Store.save()方法不存在。我的意思是,我认为它已从ExtJs的v4.x版本中删除。

取自Sencha ExtJS Docs

的示例
//this is the model we will be using in the store
Ext.define('User', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'id',    type: 'int'},
        {name: 'name',  type: 'string'},
        {name: 'phone', type: 'string', mapping: 'phoneNumber'}
    ]
});

//this data does not line up to our model fields - the phone field is called phoneNumber
var data = {
    users: [
        {
            id: 1,
            name: 'Ed Spencer',
            phoneNumber: '555 1234'
        },
        {
            id: 2,
            name: 'Abe Elias',
            phoneNumber: '666 1234'
        }
    ]
};

//note how we set the 'root' in the reader to match the data structure above
var store = Ext.create('Ext.data.Store', {
    autoLoad: true,
    model: 'User',
    data : data,
    proxy: {
        type: 'memory',
        reader: {
            type: 'json',
            root: 'users'
        }
    }
});

您拥有所有信息。 但是,如果您需要特定的帮助,您应该发布所有代码,以便我们为您提供帮助!