【问题标题】:Extjs chart picking wrong Store?Extjs图表选错Store?
【发布时间】:2024-04-21 11:45:02
【问题描述】:

我正在尝试并排绘制两个图表,它们将通过传递不同的参数来使用相同的存储,但两个图表都使用第二个存储的值。我可以在 Chrome 控制台中看到响应,两个请求和不同的响应是正确的;下面是我的代码。

Ext.define('testUtility.view.BarChart', {
  extend: 'Ext.chart.Chart',
  alias: 'widget.barChart',
  renderTo: Ext.getBody(),
  store: Ext.create('Ext.data.Store', {
    fields: ['name', 'data'],
    autoLoad: false,
    proxy: {
      type: 'ajax',
      url: 'data/store1',
      reader: {
        type: 'json',
        root: 'Data'
      },
      filterParam: undefined,
      groupParam: undefined,
      pageParam: undefined,
      startParam: undefined,
      sortParam: undefined,
      limitParam: undefined
    }
  }),
  axes: [{
    type: 'Numeric',
    position: 'left',
    fields: ['data'],
    label: {
      renderer: Ext.util.Format.numberRenderer('0,0')
    },
    title: 'Values',
    grid: true,
    minimum: 0
  }, {
    type: 'Category',
    position: 'bottom',
    fields: ['name'],
    title: 'Master'
  }],
  series: [{
    type: 'column',
    axis: 'left',
    highlight: true,
    tips: {
      trackMouse: true,
      width: 100,
      height: 28,
      renderer: function(storeItem, item) {
        this.setTitle(storeItem.get('name') + ': ' + storeItem.get('data') + ' $');
      }
    },
    label: {
      display: 'insideEnd',
      'text-anchor': 'middle',
      field: 'data',
      renderer: Ext.util.Format.numberRenderer('0'),
      orientation: 'vertical',
      color: '#333'
    },
    xField: 'name',
    yField: 'data'
  }]
});

app.js

Ext.application({
  requires: [
    'Ext.container.Viewport'
  ],

  name: 'BAR Chart  ',
  launch: function() {

    var chart1 = Ext.create('testUtility.view.BarChart', {
      id: 'chart1',
      height: 300,
      width: '50%'
    });

    var store1 = chart1.getStore();
    store1.proxy.extraParams = {
      id: chart1.id
    };
    store1.load();
    var chart2 = Ext.create('testUtility.view.BarChart', {
      id: 'chart2',
      height: 300,
      width: '50%'
    });

    var store2 = chart2.getStore();
    store2.proxy.extraParams = {
      id: chart2.id
    };
    store2.load();
  }
});

两个图表都显示了来自商店的数据,以稍后加载的为准。

【问题讨论】:

    标签: javascript extjs model-view-controller


    【解决方案1】:

    当您在定义中调用它们时,您的两家商店都是同一个。您应该在创建类的实例时调用 store,如下所示:

    var chart1 = Ext.create( 'testUtility.view.BarChart', {
        id: 'chart1',
        height: 300,
        width: '50%',
        store: store1
    } );
    

    定义自己的商店是个好习惯:

    Ext.define( 'testUtility.store.BarChart', {
        extend: 'Ext.data.Store',
        ...
    } );
    

    然后在第一部分代码之前使用它:

    var store1 = Ext.create( 'testUtility.store.BarChart', { options } );
    

    您的 options 包括额外参数,这 2 家商店不同。

    【讨论】:

    • 您最近编辑了很多帖子,我很欣赏您的工作。只需在编辑特定问题时检查帖子的其他问题。从您的活动标签中检查即兴编辑:)
    • 感谢史蒂夫,您的意见。您能否详细说明帖子可能存在的“其他问题”?你能告诉我,我怎样才能检查“即兴编辑”?
    • 其他问题是“小问题”,但值得编辑,因为您也在修复主要问题。例如,也可以修复像 herehere 这样的语法错误。是的,它们是次要的。没有直接链接到即兴编辑 AFAIK,但您可以查看从here 改进的帖子@
    • 谢谢,以后会继续关注的。