Измените код анализа.
Думайте о json как о замене xml, вы не поместите переменную / функцию в xml. В любом случае вы могли бы легко идентифицировать имя или тип (скажем, из списка или перечисления) используемого форматера. Тогда ваш код синтаксического анализа будет знать, что он должен назначить переменную / метод в качестве свойства "formatter".
Просто неправильно возвращать фактическую переменную / функцию в таком обратном вызове. Вы могли бы заставить это работать, но, честно говоря, это не тот путь.
Я бы сделал следующее ...
Измените свой обратный json на это.
[
{key:"1", label:"Order Date", formatterName:"myCustomJavaScriptFunction", sortable:true},
{key:"2", label:"Customer Name", formatterName:null, sortable:false}
]
Тогда в JS предположим, что json хранится в переменной returnedObj
function augmentReturnedObject(returnedObj)
{
// validate that returnObj.formatterName (as a variable) is not undefined
var isValidObj = (window[returnedObj.formatterName] !== undefined);
if (isValidObj)
{
// this will return the actual function / variable, here we are assigning it to returnedObj.formatter
returnedObj.formatter = window[returnedObj.formatterName];
}
else
{
returnedObj.formatter = null;
}
}
Вы можете легко уменьшить это до этого, не задумываясь
function augmentReturnedObject(returnedObj)
{
var specifiedMethod = window[returnedObj.formatterName];
returnedObj.formatter = (specifiedMethod === undefined) ? null : window[returnedObj.formatterName];
}
Итак, в конце вы возьмете свой объект json и сделаете augmentReturnedObject(returnedObj);
, и в этот момент вы можете передать returnedObj
в YUI