JSON问题,用于存储函数并删除引号

时间:2015-05-15 22:57:31

标签: json angularjs node.js kendo-grid

我尝试从我的服务器创建一个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);
                }
            }
        }
   ....

2 个答案:

答案 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?