Octavus 2009-07-27 18:10
浏览 266
已采纳

Extjs项目里面的一段代码~看不懂啊~~

grid里面的一个列的格式渲染,用到了一个自定义的函数:
{
header : "Spending",
dataIndex : 'spending',
align : 'right',
renderer : CurrencyFormat()

}

函数的定义如下
var NumberReg = /(\d+)(\d{3})/;
var DEFAULT_CURRENCY = '$';
NumberFormat = function(v) { //这个函数是渲染一般的数值数据,如12345,显示为12,345
var whole = String(v);
while (NumberReg.test(whole)) {
whole = whole.replace(NumberReg, '$1' + ',' + '$2');
}
return whole;
}
CurrencyFormat = function(currency) { //这个函数是渲染金额数据,如12345,显示为$12,345
return function(v) { //[color=#FF0000]开始看不懂了,这个用法...currency、v如是参数到底是怎么传递的?(问题一)[/color]
var txt = NumberFormat(v);
if (!currency) {
currency = DEFAULT_CURRENCY;
}
if (v < 0) {
return "-" + currency + txt.substring(1);
} else {
return currency + txt;
}
}
}

第二个问题是:Extjs有没有自己定义好的渲染各种数据显示的方法,最常用的方法是怎么用的?

  • 写回答

2条回答 默认 最新

  • iteye_10013 2009-07-27 20:17
    关注

    1.首先看renderer : CurrencyFormat()

    根据column的api, renderer的期望值是一个
    function(value, metaData, record, rowIndex, colIndex, store).
    在渲染的时候,会调用每个cell的renderer (这里你可以看GridView的onRender源码)

    2.再来看你的
    [code="javascript"]
    CurrencyFormat = function(currency) {
    return
    function(v) {

    var txt = NumberFormat(v);
    if (!currency) {
    currency = DEFAULT_CURRENCY;
    }
    if (v < 0) {
    return "-" + currency + txt.substring(1);
    } else {
    return currency + txt;
    }

    }
    } [/code]

    基于第一点,所以这里的CurrencyFormat() 必须返回一个function.
    v就是这个function的第一个参数,形参.
    而currency呢是用来构造这个function闭包的一个变量.

    从你这段代码来看,是不必要的,
    只需要直接:
    [code="javascript"]
    {
    header : "Spending",
    dataIndex : 'spending',
    align : 'right',
    renderer : function(value, metaData, record, rowIndex, colIndex, store) {

    //这里很多写法也是不必要的,自己根据需求优化就ok了.
    //这里还需要注意的是作用域问题
    var txt = NumberFormat(value);
    if (!value) {
    currency = DEFAULT_CURRENCY;
    }
    if (value < 0) {
    return "-" + currency + txt.substring(1);
    } else {
    return currency + txt;
    }

    }
    }

    [/code]

    3.至于
    [quote]第二个问题是:Extjs有没有自己定义好的渲染各种数据显示的方法,最常用的方法是怎么用的? [/quote]

    在3.0里面有BooleanColumn, DateColumn, NumberColumn, TemplateColumn等.
    在2.2你也可以类似的定义一些就ok了.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 正弦信号发生器串并联电路电阻无法保持同步怎么办
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 个人网站被恶意大量访问,怎么办
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)