1
0
mirror of https://github.com/DataTables/DataTables.git synced 2024-11-30 12:24:10 +01:00

Updated: data and render can now have periods escaped from dotted

object notation.

- Previously if you had an object key that contained a period, it
  wouldn't work with `data` or `render` (or rather it would need a
  function call to do it manually), since a split was being done on the
  periods to reconstruct the Javascript object property chain. Now it is
  possible to escape a period, allowing it to be included in the
  property name read / set.

- Example:

$('#example').dataTable( {
	columns: [
		{ data: 'a' },
		{ data: 'b\\.c' }
	],
	data: [
		{ 'a': 1, 'b.c': 2 },
		{ 'a': 3, 'b.c': 4 },
		{ 'a': 5, 'b.c': 6 },
		{ 'a': 7, 'b.c': 8 }
	]
} );
This commit is contained in:
Allan Jardine 2013-02-04 19:44:41 +00:00
parent b2de50229e
commit 1b6ffeaf78
2 changed files with 19 additions and 4 deletions

View File

@ -226,6 +226,19 @@ function _fnSetCellData( oSettings, iRow, iCol, val )
var __reArray = /\[.*?\]$/; var __reArray = /\[.*?\]$/;
var __reFn = /\(\)$/; var __reFn = /\(\)$/;
/**
* Split string on periods, taking into account escaped periods
* @param {string} str String to split
* @return {array} Split string
*/
function _fnSplitObjNotation( str )
{
return $.map( str.match(/(\\.|[^\.])+/g), function ( s ) {
return s.replace('\\.', '.');
} );
}
/** /**
* Return a function that can be used to get data from a source object, taking * Return a function that can be used to get data from a source object, taking
* into account the ability to use nested objects as a source * into account the ability to use nested objects as a source
@ -258,7 +271,7 @@ function _fnGetObjectDataFn( mSource )
* be used if defined, rather than throwing an error * be used if defined, rather than throwing an error
*/ */
var fetchData = function (data, type, src) { var fetchData = function (data, type, src) {
var a = src.split('.'); var a = _fnSplitObjNotation( src );
var arrayNotation, funcNotation, out, innerSrc; var arrayNotation, funcNotation, out, innerSrc;
if ( src !== "" ) if ( src !== "" )
@ -356,7 +369,7 @@ function _fnSetObjectDataFn( mSource )
{ {
/* Like the get, we need to get data from a nested object */ /* Like the get, we need to get data from a nested object */
var setData = function (data, val, src) { var setData = function (data, val, src) {
var a = src.split('.'), b; var a = _fnSplitObjNotation( src );
var aLast = a[a.length-1]; var aLast = a[a.length-1];
var arrayNotation, funcNotation, o, innerSrc; var arrayNotation, funcNotation, o, innerSrc;

View File

@ -278,7 +278,8 @@ DataTable.defaults.column = {
* * `.` - Dotted Javascript notation. Just as you use a `.` in * * `.` - Dotted Javascript notation. Just as you use a `.` in
* Javascript to read from nested objects, so to can the options * Javascript to read from nested objects, so to can the options
* specified in `data`. For example: `browser.version` or * specified in `data`. For example: `browser.version` or
* `browser.name`. * `browser.name`. If your object parameter name contains a period, use
* `\\` to escape it - i.e. `first\\.name`.
* * `[]` - Array notation. DataTables can automatically combine data * * `[]` - Array notation. DataTables can automatically combine data
* from and array source, joining the data with the characters provided * from and array source, joining the data with the characters provided
* between the two brackets. For example: `name[, ]` would provide a * between the two brackets. For example: `name[, ]` would provide a
@ -453,7 +454,8 @@ DataTable.defaults.column = {
* * `.` - Dotted Javascript notation. Just as you use a `.` in * * `.` - Dotted Javascript notation. Just as you use a `.` in
* Javascript to read from nested objects, so to can the options * Javascript to read from nested objects, so to can the options
* specified in `data`. For example: `browser.version` or * specified in `data`. For example: `browser.version` or
* `browser.name`. * `browser.name`. If your object parameter name contains a period, use
* `\\` to escape it - i.e. `first\\.name`.
* * `[]` - Array notation. DataTables can automatically combine data * * `[]` - Array notation. DataTables can automatically combine data
* from and array source, joining the data with the characters provided * from and array source, joining the data with the characters provided
* between the two brackets. For example: `name[, ]` would provide a * between the two brackets. For example: `name[, ]` would provide a