Datatables:我应该何时使用mdata/mrender或data/render?

Datatables:我应该何时使用mdata/mrender或data/render?,datatables,Datatables,我对DataTableAPI感到非常困惑 有时使用mdata、mrender,有时使用数据、渲染 我在用那个狙击手: { mData: 'deadline', "title":"Deadline", "render": function(data, type, row) { var recurrence = row.rec_description; return sprintf("<i

我对DataTableAPI感到非常困惑 有时使用mdata、mrender,有时使用数据、渲染

我在用那个狙击手:

{ mData: 'deadline', "title":"Deadline", "render": function(data, type, row) {
                var recurrence = row.rec_description;                    
                return sprintf("<i class='fa fa-calendar'></i> %s <div>(%s)</div>\
                <div><i class='fa fa-recycle'></i> Récurrence:%s</div>\
                ",
                    moment(data,'X').format('DD/MM/YYYY'),  moment(data,'X').locale('fr').fromNow(), recurrence);
            } },
{mData:“截止日期”,“标题”:“截止日期”,“呈现”:函数(数据、类型、行){
var recurrence=行记录描述;
返回sprintf(“%s(%s))\
Récurrence:%s\
",
矩(数据,'X')。格式('DD/MM/YYYY'),矩(数据,'X')。区域设置('fr')。fromNow(),重复);
} },
这很好,但是在该列上排序不起作用: 也许这是因为使用了“mData,render”

deadline是一个int(15),但它看起来是按html内容排序的


有什么想法吗?

jQuery DataTables 1.9在选项名称中使用匈牙利符号(
mData
mRender
),jQuery DataTables 1.10切换到驼峰式符号(
data
render
),但仍然支持1.9中的选项名称

如果您使用的是jQuery DataTables 1.10,我建议您切换到驼峰大小写表示法,因为在下一个主要版本中可能会放弃对匈牙利表示法选项名称的支持

为了能够按
截止日期排序
,您需要重写
呈现
函数,如下所示。它仅在显示数据时生成HTML内容,否则在排序时返回原始数据

{ 
   "data": "deadline", 
   "title":"Deadline", 
   "render": function(data, type, row, meta) {
      if(type === "display"){
            var recurrence = row.rec_description;                    
            data = sprintf(
               "<i class='fa fa-calendar'></i> %s <div>(%s)</div>"
                  + "<div><i class='fa fa-recycle'></i> Récurrence:%s</div>",
               moment(data,'X').format('DD/MM/YYYY'),
               moment(data,'X').locale('fr').fromNow(), 
               recurrence
            );
      } 

      return data;
   }
},
{
“数据”:“截止日期”,
“标题”:“截止日期”,
“呈现”:函数(数据、类型、行、元){
如果(类型==“显示”){
var recurrence=行记录描述;
数据=sprintf(
%s(%s)
+“Récurrence:%s”,
力矩(数据,'X')。格式('DD/MM/YYYY'),
矩(数据,'X').locale('fr').fromNow(),
复发
);
} 
返回数据;
}
},

有关详细信息,请参见。

在这种情况下需要注意的一件事是范围界定/关闭问题,其中需要或引用渲染定义范围之外的某些值。在这种情况下,在“类”作用域中创建一个名为makeRenderer的函数,或其他类似函数,以接受所需的外部参数。让makeRenderer返回实际的html呈现函数。将此函数指定给“render”。我认为应该避免重复,以避免XSS问题。