ext.js自我维护的商店

时间:2014-06-22 07:56:32

标签: javascript extjs model-view-controller

获得客户端存储的最短最快方法是什么,它使用某种回调/侦听器来返回数据(而不是来自服务器)。说明:

Ext.define('aaa.store.ContactList', {
    extend: 'Ext.data.Store',
    requires: 'aaa.model.ContactList',
    model: 'aaa.model.ContactList',
    autoLoad: true,
    fields:['firstLetter', 'userId', 'userName', 'h', 'w', 'm', 'v', 'custom'],
    groupField: 'firstLetter',
    sorters: ['firstLetter', 'userId'],

    // Overriding the model's default proxy
    proxy: {
        type: 'direct',
        directFn: 'getPhoneBookEntries', <<--- don't want this to be a server method, but a client side js method...
        reader: {
            type: 'json',
            rootProperty: ''
        }
    }
});

我有一个网格使用这个商店来显示联系人列表。问题是“直接”和“直接”。和其他方法依赖于商店从服务器读取的事实。但是我有我的机制从服务器上读取,我只是想要提供#39;商店手动。

可以这样做吗?

使用一些代码更新问题:

型号:

Ext.define('WebPhone.model.ContactList', {
    extend: 'Ext.data.Model',

    fields: [
        { name: 'firstLetter', type: 'string' },
        { name: 'userId', type: 'string' },
        { name: 'userName', type: 'string' },
        { name: 'h', type: 'string' },
        { name: 'w', type: 'string' },
        { name: 'm', type: 'string' },
        { name: 'v', type: 'string' },
        { name: 'custom', type: 'string' }

    ]
});

商品

Ext.define('WebPhone.store.ContactList', {
    extend: 'Ext.data.Store',
    requires: 'WebPhone.model.ContactList',
    model: 'WebPhone.model.ContactList',
    autoLoad: true,
    fields:['firstLetter', 'userId', 'userName', 'h', 'w', 'm', 'v', 'custom'],
    groupField: 'firstLetter',
    sorters: ['firstLetter', 'userId'],

    // Overriding the model's default proxy
//    proxy: {
//        type: 'memory',
//        reader: {
//            type: 'json',
//            rootProperty: 'root'
//        }
//    }
});

此帖子的gride定义太长,但它适用于预加载的数据

数据加载代码:

var store = Ext.getStore( "ContactList" );
//var array_values = new Array();
//for( var key in phoneBook )
    //array_values.push( phoneBook[key] );
//store.loadData( array_values );
store.loadData( [{firstLetter:'a', userId:'ali', userName:'ali', h:'04040', w:'04040', m:'04040', v:'04040', custom:'04040'}] );

我尝试了loadRawData和loadData但没有成功...... 尝试使用代理(ajax / json / memory / array ...你可以命名)而不使用。

没有成功。我在这里缺少什么?

2 个答案:

答案 0 :(得分:0)

最简单的方法是在没有代理的情况下配置商店,并在准备好数据后进行配置:

store.loadData(yourData)

答案 1 :(得分:0)

我终于设法修复了这个问题......

  1. 应从网格视图中检索商店
  2. loadData()由于某种原因无效。 loadRawData做了。为什么?不知道。
  3. 无论如何..代码:

    var contactListView = Ext.ComponentQuery.query('contact-list-view')[0];
    var store = contactListView.getStore();
    var array_values = new Array();
    for( var key in phoneBook )
        array_values.push( phoneBook[key] );
    store.loadRawData( array_values );