1

我一直在尝试找到将以下代码从升级到的解决ExtJs3.4方案ExtJs 4.2
我找到了一些答案并查看了 Sencha 的文档,但仍然很难处理。

如果有人知道如何在 ExtJs4.2 中重写此代码,请告诉我。提前致谢。

        var config = 
        {       
            store: new Ext.data.Store({
                autoLoad: true,
                proxy: new Ext.data.HttpProxy({ url: '/main/...' }),
                reader: new Ext.data.JsonReader
                ({
                    root: 'data',
                    totalProperty: 'totalCount',
                    id: 'id',
                    fields: 
                    [
                        'alert_id',
                        {name: 'duration', type: 'int'},
                        {name: 'start_date', type: 'date', dateFormat: 'timestamp'},
                        {name: 'end_date', type: 'date', dateFormat: 'timestamp'},
                        'monitor'
                    ]
                })
            }),
        }

        // more code here

这是我从上面的代码中知道的:

  • Modelsfield不再使用Stores_
  • reader应该在里面proxy

这些是警告

[DEPRECATED][4.0][Ext.data.Store]: Passing a "fields" config via the store's reader config is no longer supported. Instead you should configure a model and pass it as the store's "model" config. Please see the header docs for Ext.data.Store for details on properly setting up your data components.
ext-all.js (line 21)
[DEPRECATED][4.0][Ext.data.Store] reader (config): The reader config should now be specified on the configured proxy rather than directly on the store.


附录

我一开始是这样做的:

 Ext.define('User', {
     extend: 'Ext.data.Model',
     id: 'id',
     fields: 
     [
         'alert_id',
         {name: 'duration', type: 'int'},
         {name: 'start_date', type: 'date', dateFormat: 'timestamp'},
         {name: 'end_date', type: 'date', dateFormat: 'timestamp'},
         'monitor'
     ]
 });

 var config = 
 {      
      store: new Ext.data.Store({
          model:'User',
          proxy: 
          {
              url: '/main/...',
              reader: new Ext.data.JsonReader
              ({
                    root: 'data',
                    totalProperty: 'totalCount',
              })
          }

      }),

      // more code here
 }

所以我不确定要写什么而不是reader: new Ext.data.JsonReader.
也不管使用Model与否,因为Store不再使用fields。直到我看到答案我才知道
Ext.data.JsonStore

4

3 回答 3

2

这个怎么样?JsonStore记录在http://docs-origin.sencha.com/extjs/4.2.0/#!/api/Ext.data.JsonStore

initComponent: function () {

    var config = {
        store: new Ext.data.JsonStore({
            autoLoad: true,
            fields: [ 'alert_id', 'duration', 'start_date', 'end_date' ],
            proxy: {
                type: 'ajax',
                url: '/main/...',
                reader: {
                    type: 'json',
                    root: 'data',
                    totalProperty: 'totalCount'
                }
            }
        })
    }
}
于 2013-08-21T03:11:14.143 回答
2

Chris Farmer 的回答是正确的。但是,这里有一个更彻底的解释。

Ext 现在鼓励您记录数据的格式,因此您应该使用 anExt.data.Model来定义字段名称。建议的方法是在模型本身上定义代理,以便可以独立于商店加载它

// File 1
Ext.define('my.User', {
     extend: 'Ext.data.Model',
     fields: [
         'alert_id',
         {name: 'duration', type: 'int'},
         {name: 'start_date', type: 'date', dateFormat: 'timestamp'},
         {name: 'end_date', type: 'date', dateFormat: 'timestamp'},
         'monitor'
     ],
     proxy: {
        type: 'ajax',
        url: '/main/...',
        // Reader is now on the proxy, as the message was explaining
        reader: {
            type: 'json',
            root: 'data',
            totalProperty: 'totalCount'
        }
     }
 });

 // File 2
 // Use the model with the store
 var config = {
     // Passing the model definition to the store as the message was explaining
     store: new Ext.data.JsonStore({model:  'my.User', autoLoad: true})
 };

Ext 仍然允许您在创建商店时使用字段定义而不是模型,但不建议这样做,会创建隐式模型。这是如何做到的。

 var config = {
     store: new Ext.data.JsonStore({
         fields: [
             'alert_id',
             {name: 'duration', type: 'int'},
             {name: 'start_date', type: 'date', dateFormat: 'timestamp'},
             {name: 'end_date', type: 'date', dateFormat: 'timestamp'},
             'monitor'
         ],
         proxy: {
             type: 'ajax',
             url: '/main/...',
             reader: {
                 type: 'json',
                 root: 'data',
                 totalProperty: 'totalCount'
             }
         }
     });
 };
于 2013-08-22T00:09:43.847 回答
0
initComponent: function () {

this.store= new Ext.data.JsonStore({
        autoLoad: true,
        fields: [ 'alert_id', 'duration', 'start_date', 'end_date' ],
        proxy: {
            type: 'ajax',
            url: '/main/...',
            reader: {
                type: 'json',
                root: 'data',
                totalProperty: 'totalCount'
            }
        }
    });

 this.callParent(arguments);
}
于 2013-08-21T19:23:55.093 回答