【问题标题】:How can I set up formatters in SlickGrid?如何在 SlickGrid 中设置格式化程序?
【发布时间】:2012-06-19 21:39:07
【问题描述】:

我已经完成了研究,我知道如何制作自定义格式化程序或编辑器以及如何使用它。 我的问题是,我无法设置或使用格式化程序。 我的结构:

jQuery 包括:

    <script type="text/javascript" src="jquery-1.7.2.min.js"></script>


    <script type="text/javascript" src="jquery.event.drag-2.2.js"></script>
    <script type="text/javascript" src="slick.core.js"></script>
    <script type="text/javascript" src="slick.editors.js"></script>
    <script type="text/javascript" src="slick.formatters.js"></script>
    <script type="text/javascript" src="slick.grid.js"></script>

上面的一切都是未经编辑的。 实现网格的代码:

                        var grid; var cols; var rows; var options = {
                            enableCellNavigation: true,
                            enableColumnReorder: false,
                            forceFitColumns: true
                        };
*rows and cols come from server side via JSON.parse*
grid = new Slick.Grid("#results", rows, cols, options);

来自服务器并填充 rows 和 cols 变量的代码基本上是这样的:

            cols:
            echo json_encode('[
                    {"id":"price",      "name":"Ár",                "field":"price"},
                    {"id":"location",   "name":"Elhelyezkedés",     "field":"location"},
                    {"id":"egyeb",      "name":"Lófasz",            "field":"egyeb"},
                    {"id":"pic",        "name":"Képek",             "field":"pic", "formatter":"Slick.Formatters.PercentComplete"}
                ]');
            rows:
            echo json_encode('[
                    {"price": "5", "location":"AlsóBélaCsecselény",     "egyeb":"lófasz",   "pic":"1",  "link":"ezittahelye"},
                    {"price": "6", "location":"qrsóBéqrcselény",        "egyeb":"lófasz",   "pic":"2",  "link":"ezittahelye"},
                    {"price": "7", "location":"AlsóBélaqwqwrelény",     "egyeb":"lófasz",   "pic":"3",  "link":"ezittahelye"},
                    {"price": "8", "location":"qwrCsecselény",          "egyeb":"lófasz",   "pic":"4",  "link":"ezittahelye"}
                ]');

一切正常,当 pic 列没有格式化程序时,网格也可以使用列的额外属性,例如错误输入的“格式化程序”标签(如“fformatter”或其他),

但每次 JSON 代码具有“格式化程序”属性时,Javascript 都会给我以下错误:

未捕获的异常:TypeError: 'getFormatter(row, m)' is not a function

每次我尝试加载表格时,格式化程序都会搞砸一切,我不知道下一步该做什么!我试图追踪这个错误,它把我带到了 slick.grid.js 源代码的第 1124 行,这个函数不知何故用 return 语句破坏了一切..

function getFormatter(row, column) {
  var rowMetadata = data.getItemMetadata && data.getItemMetadata(row);

  // look up by id, then index
  var columnOverrides = rowMetadata &&
      rowMetadata.columns &&
      (rowMetadata.columns[column.id] || rowMetadata.columns[getColumnIndex(column.id)]);

  return (columnOverrides && columnOverrides.formatter) ||
      (rowMetadata && rowMetadata.formatter) ||
      column.formatter ||
      (options.formatterFactory && options.formatterFactory.getFormatter(column)) ||
      options.defaultFormatter;
}

任何帮助将不胜感激!

编辑:这是我从服务器获取代码的方式:

                            $.post( "queries.php?event=search&&phase=columns", $("#full_search").serialize(), function(data){
                                    cols = JSON.parse(data);
                                    alert(cols[1].id);
                                    $.post( "queries.php?event=search&&phase=rows", $("#full_search").serialize(), function(data){
                                        rows = JSON.parse(data);
                                        alert(rows[1].link);
                                        grid = new Slick.Grid("#results", rows, cols, options);
                                        alert(grid.getData().length);
                                        return false;
                                    },"json");
                                return false;
                            },"json");
                            },"json");

【问题讨论】:

    标签: jquery slickgrid formatter


    【解决方案1】:

    Slick.Formatters.PercentComplete 不应该是字符串。它是 slick.formatters.js 中定义的函数(类构造函数)。

    【讨论】:

    • 编辑了帖子以显示我如何通过帖子调用获取 JSON。有没有办法解决?如果我丢弃“Slick.Formatters.PercentComplete”中的撇号,则孔脚本将在 JSON.parse 行中断。
    • 将“格式化程序”:“Slick.Formatters.PercentComplete”更改为“格式化程序”:Slick.Formatters.PercentComplete。
    • 那么漏洞脚本将在 JSON.parse 行中断。有没有办法解决这个问题?我不确定我应该如何通过 post 请求发送 JSON 代码
    • 是的,它不是 json。这是一个javascript对象。不知道你需要用php做什么。
    • 好吧,我解决了!我解析了数据,然后将格式化程序字符串设置为一个对象: cols = JSON.parse(data); cols[3].formatter = Slick.Formatters.PercentComplete;就这样!感谢您的帮助!
    【解决方案2】:

    好的,我解决了!我解析了数据,然后将格式化程序字符串设置为一个对象: cols = JSON.parse(data); cols[3].formatter = Slick.Formatters.PercentComplete;就这样!感谢您的帮助!

    我会建议这样的东西。

    Slick.Formatters.PercentComplete 是一个函数,json 中没有函数,如http://json.org 所示。此外,在具有函数的 JSON 中验证失败。您可以在这里尝试验证:http://jsonlint.com/

    您不能在 JSON 中使用函数。然后,在收到“几乎是 JSON”的数据后,您需要在客户端使用 javascript 解析它,就像您所做的那样。

    感谢您的样品! 我遇到了同样的问题,这很有帮助。

    在我的例子中,我使用 jQuery Ajax 获取元数据:

    req = $.ajax({type: 'GET',
                  url: url,
                  dataType: 'json',
                  async: false}).done(function(meta) { metadata = meta; });
    

    返回的元数据是这样的:

    {"errors":{}, 
     "columns":[{"formatter":"TaskNameFormatter",
                 "field":"1",
                 "id":"1","width":220,"name":"Hierarchy1","cssClass":"cell-title"},
                 OTHERS_COLUMNS]}
    

    意识到格式化程序仍然是一个字符串。然后我浏览所有列,使用以下代码将格式化程序从字符串更改为函数:

      $.each(metadata.columns, function(index, value) {
                                  if(typeof value.formatter != "undefined") {
                                     value.formatter = eval(value.formatter);
                                  } 
      });
    

    【讨论】:

      【解决方案3】:

      对于通过 JSON 获取数据的用户,对象调用仍必须用引号括起来;但是,我能够在 slick.grid.js 文件中找到它正在退出的部分:

      if (d) {
        if(m.formatter){m.formatter=eval(m.formatter)} // make it an object call instead of string
        stringArray.push(getFormatter(row, m)(row, cell, value, m, d));
      }
      

      【讨论】:

        猜你喜欢
        • 2013-06-27
        • 2017-08-03
        • 2012-05-20
        • 1970-01-01
        • 1970-01-01
        • 2016-05-23
        • 1970-01-01
        • 1970-01-01
        • 2017-05-21
        相关资源
        最近更新 更多