我尝试从我的服务器创建一个json并在客户端角度中检索JSON。但我的json是一个功能。
我在服务器中创建了这个JSON:
var header = {};
var editor = 'function (container, options) {jsdd.appendTo(container); $compile(editor)($scope); editor.css("visibility", "visible")};';
header['editor'] = editor;
在客户端我检索我的json:
editor: "function (container, options) {jsdd.appendTo(container); $compile(editor)($scope); editor.css("visibility", "visible")};"
然而它不起作用,因为我想删除引号并得到这个:
editor: function (container, options) {jsdd.appendTo(container); $compile(editor)($scope); editor.css("visibility", "visible")};
我该怎么做?
更新
我尝试从服务器发送的json获取的结果是:
{
title: "category",
field: "category",
editor: function (container, options) {
var editor = $('<input kendo-drop-down-list required k-data-text-field="\'valueen\'" k-data-value-field="\'id\'" k-data-source=\"mapDSource.get(\'category\')\" data-bind="value:' + options.field + '"/>')
.appendTo(container);
$compile(editor)($scope);
editor.css("visibility", "visible");
}
, template: "{{getName(dataItem, 'category', 'id', 'valueen')}}"
, type: 'string',
editable: true,
width: 250
},
{
title: 'keyen',
type: 'string',
field: 'keyen',
editable: true,
validation: {
required: true
}, ....
所有作品除了作为函数的编辑器参数之外,所以我正在做的是以下它并且它有效:
var table = {};
table.type = "referential";
gridService.loadTable(table).success(function (data) {
if(data.header)
{
var i;
for(i in data.header)
{
var editor = data.header[i]['editor'];
if(editor)
{
data.header[i]['editor'] = new Function("container", "options", editor);
}
}
}
....
答案 0 :(得分:2)
Althgough @RunWith(SpringJUnit4ClassRunner.class)
@AnnotationOne
public class TestClassOne {
// ...
}
不是一个好主意,它可能是唯一的选择(假设你不改变你当前的实现,我觉得你应该这样做)。
eval
我推荐h['editor'] = eval('('+editor+')');
感觉很糟糕。
作为旁注,避免eval
的一种快速方法是仅返回json字符串中函数的主体(大括号之间的部分):
eval
然后像这样定义var editor = 'jsdd.appendTo(container); $compile(editor)($scope); editor.css("visibility", "visible");'
:
header['editor']
答案 1 :(得分:0)
我认为$parse正是您所寻找的。我可能会错过一些上下文,但这似乎是一个奇怪的用例。为什么不在http请求中获取.js文件而不是JSON对象业务中的此字符串化JS?