日期:2014-05-16  浏览次数:20376 次

ExtJS3.x 随笔(2010-07-08更新)

谨用该贴来记录一些使用extjs过程中的笔记吧. 不时更新.

?

2010-07-02

?

1. extjs chart bug

?

1)显示/隐藏chart(X轴为时间轴)的时候,会出现时间渲染函数失效的情况.

xAxis: new Ext.chart.TimeAxis({
  displayName: '时间',
  labelRenderer : Ext.util.Format.dateRenderer('H:i')
})

?暂时没有仔细去分析源码,估计是显示隐藏的时候,那个函数被覆盖掉了.

?现在的解决方式是不显示/隐藏,而是重新生成.

?

2)跨月的时候,坐标轴错误,坐标点都挤到最后面去了.

环境是:extjs 3.2.0 , 用法是每半小时一个点,成功率折线图(所以共48个点).

测试了下,发现是当跨月的时候会出该问题.

?

暂时的解决方法是,因为我们的x轴显示不需要显示日期,所以在store的Field里面判断了下,如果跨月,就日期前移一天.

{
  name:'finishTime',type:'date',dateFormat:'Y-m-d H:i:s',
  convert:function(v,r){
    var date = Date.parseDate(r.finishTime,'Y-m-d H:i:s');
    if(date.getDate()==1){
      //如果日期为该月的第一天,则往前移动一天
      return date.add(Date.DAY,-1);
    }else if(date.getDate()==date.getLastDateOfMonth().getDate()){
      //如果日期为该月的最后一天,则往前移动一天
      return date.add(Date.DAY,-1);
    }
     return date;
  }
}
?

?

2.在Menu中放置一个DateField,点击的时候会隐藏的问题.

?

主要是因为DateField中还有个DateMenu,2个menu冲突了

var dateField = new Ext.form.DateField({
    fieldLabel:'日期1',
    menu: new Ext.menu.DateMenu({
      hideOnClick: false,
      allowOtherMenus: true
    })
  })
?

相关阅读: <ExtJS Menu嵌套combo等控件时,自动隐藏/遮盖等bug的解决方案>

http://atian25.iteye.com/blog/441476

?

?

3.To be continue

?

//tz

1 楼 zxm94w 2011-10-20  
楼主,你好,最近在做一个项目需要实现曲线图,刚巧使用的是ExtJs3.2,从网上找了不少这方面的信息,可是都未能实现,3.2的样例试了一下,貌似也不行,不知道楼主可有这方面的文档或者完整的代码,如果有请发到我的邮箱zxm94w@126.com,十分感谢!
2 楼 atian25 2011-10-21  
考虑用4.x吧 那图表才是王道
3 楼 zxm94w 2011-10-26  
atian25 写道
考虑用4.x吧 那图表才是王道


呵呵,项目做了一半不能随便换的哈,不过好在大体上搞出来了,这还要感谢你那么多帖子,几乎翻了个遍,哈哈。就剩下一个小问题:如何格式化X轴(时间轴),后台传来的是时间字符串,想格式化一下,不知道怎么整,尝试了几个方法都没能成功。
将X轴定义成TimeAxis,貌似是new出来的,所以坐标就不会显示我后台的数据。
想通过labelRenderer:Ext.util.format.date(date,format)来实现,
但是不知道如何获取X轴上的这个date,主要对labelRenderer还不是很熟悉。

你可有什么法子?谢谢了。
4 楼 atian25 2011-10-27  
zxm94w 写道
atian25 写道
考虑用4.x吧 那图表才是王道


呵呵,项目做了一半不能随便换的哈,不过好在大体上搞出来了,这还要感谢你那么多帖子,几乎翻了个遍,哈哈。就剩下一个小问题:如何格式化X轴(时间轴),后台传来的是时间字符串,想格式化一下,不知道怎么整,尝试了几个方法都没能成功。
将X轴定义成TimeAxis,貌似是new出来的,所以坐标就不会显示我后台的数据。
想通过labelRenderer:Ext.util.format.date(date,format)来实现,
但是不知道如何获取X轴上的这个date,主要对labelRenderer还不是很熟悉。

你可有什么法子?谢谢了。



labelRenderer应该不难吧,翻下源码就知道了,我记得之前我弄过的.现在不碰3.x了.
另一个歪路是,在store里面加一个字段,映射到你的date字段,在里面格式化,类似:
{name:'dateStr',mapping:'dateField1',convert:function(v,r){return v.format('Y-M-D')})
5 楼 zxm94w 2011-10-27  
atian25 写道
zxm94w 写道
atian25 写道
考虑用4.x吧 那图表才是王道


呵呵,项目做了一半不能随便换的哈,不过好在大体上搞出来了,这还要感谢你那么多帖子,几乎翻了个遍,哈哈。就剩下一个小问题:如何格式化X轴(时间轴),后台传来的是时间字符串,想格式化一下,不知道怎么整,尝试了几个方法都没能成功。
将X轴定义成TimeAxis,貌似是new出来的,所以坐标就不会显示我后台的数据。
想通过labelRenderer:Ext.util.format.date(date,format)来实现,
但是不知道如何获取X轴上的这个date,主要对labelRenderer还不是很熟悉。