1

私はすでに研究を行っており、カスタムフォーマッターまたはエディターの作成方法とその使用方法を知っています。私の問題は、フォーマッターをセットアップまたは使用できないことです。私の構造:

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);

サーバーから取得され、行と列の変数を埋めるコードは、基本的に次のとおりです。

            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)' は関数ではありません

テーブルをロードしようとするたびに、フォーマッタがすべてを台無しにして、次に何をすべきかわかりません! バグを追跡しようとしたところ、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");
4

3 に答える 3

2

了解しました。解決しました。データを解析してから、フォーマッター文字列をオブジェクトに設定しました。cols = JSON.parse(data); cols [3] .formatter = Slick.Formatters.PercentComplete; そしてそれはそれをします!ご協力ありがとうございました!

私はこのようなものを提案します。

Slick.Formatters.PercentCompleteは関数であり、http://json.orgに示されているようにjsonには関数がありませ。また、関数を持つJSONでは検証に失敗します。ここで検証を試すことができます:http://jsonlint.com/

JSONで関数を使用することはできません。次に、「ほぼJSON」データを受信した後、クライアントでjavascriptを使用してデータを解析する必要があります。

サンプルをありがとう!私は同じ問題を抱えていて、それは役に立ちました。

私の場合、jQueryAjaxでメタデータを取得します。

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);
                              } 
  });
于 2013-01-15T20:10:03.403 に答える
2

Slick.Formatters.PercentComplete文字列であってはなりません。slick.formatters.js で定義されている関数 (クラス コンストラクター) です。

于 2012-06-19T21:45:13.493 に答える
0

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));
}
于 2012-08-15T17:32:19.943 に答える