【问题标题】:ExtJs Json storeExtJs Json 存储
【发布时间】:2011-06-03 09:41:19
【问题描述】:

有没有办法将 ExtJs 网格面板的 JSON 存储作为二维数组发送到控制器。 提前致谢。

【问题讨论】:

    标签: extjs


    【解决方案1】:

    要从您的商店中获取一组记录,您可以使用:

    var store = gridpanel.getStore();
    var records = store.getRange();
    // If you don't want any of that metadata referring to the gridpanel.
    var rawRecords = records.map(function(r) {return r.data;});
    

    要将其传递给控制器​​,最佳做法是从网格面板触发事件并让控制器监听它。

    // Somewhere in gridpanel or a reference to whatever your custom class is
    gridpanel.fireEvent('rawRecordsEvent', rawRecords);
    ...
    // In controller
    Ext.define('MyApp.controller.GridController', {
        extend: 'Ext.app.Controller',
    
        init: function() {
            this.control({
                // gridpanel or alias of whatever your custom class is.
                'gridpanel': {
                     rawRecordsEvent: this.onRawRecordsEvent
                 }
            });
        },
    
        onRawRecordsEvent: function(rawRecords) {
            console.log(rawRecords);
        }
    });
    

    这是一个很好的例子,说明如何使用控制器来监听视图组件: http://www.objis.com/formationextjs/lib/extjs-4.0.0/docs/api/Ext.app.Controller.html

    【讨论】:

    • 我的团队经常使用这种方法。在控制器中监听事件非常棒,因为它使您无需传递参数。另外,请记住在网格面板上使用一个事件,这样您将获得传入的网格面板的引用。这样您就可以轻松避免使用 Ext.getCmp (),它可能会成为大页面/doms 的性能杀手。
    【解决方案2】:

    我认为您可以使用 baseParams 选项来发送您需要的任何参数。 例如:

    var store = new Ext.data.JsonStore({
        baseParams: {some_array: [['1'],['2']]},
        ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 2011-08-11
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      • 2013-04-16
      相关资源
      最近更新 更多