7

MVC 4 プロジェクトをリリース モードで実行したとき、SlickGridを使用する 1 つのページが正しく表示されませんでした (グリッドが非常に高く、グリッド セルがありません)。

ただし、これは SlickGrid の問題ではなく、バンドラー ( System.Web.OptimizationMVC 4 に統合されている) がコードを縮小した方法の問題だと思います。

縮小された JavaScript を入手し、問題が修正されるまで、一度に 1 つの領域で縮小を元に戻し始めました。私はそれが変わっていることを発見しました(そしてスクロールを許してください、私は縮小されたバージョンをそのまま残したいです)

function SlickFilter(n,t){var i=n.option,r=t.searchString;return n.pctSortKey.key<t.percentCompleteThreshold||r!=""&&i.indexOf(r)==-1&&i!="Unweighted Response"&&i!="Median"&&i!="Average"?!1:!0}

元に

function SlickFilter(item, args) {
    if (item.pctSortKey.key < args.percentCompleteThreshold) {
        return false;
    }

    if (args.searchString != "" && item.option.indexOf(args.searchString) == -1 && item.option != "Unweighted Response" && item.option != "Median" && item.option != "Average") {
        return false;
    }

    return true;
}

縮小されたファイルの他のすべての要素が変更されていない場合、問題を解決します。

関数は次のように使用されます。

dataView.setFilter(SlickFilter);

特定の結果を除外するための SlickGrid のコールバック関数を提供します。

元の関数と縮小された関数が同等ではないのはなぜですか?

アップデート

SlickGrid は、私が提供するフィルター関数を「コンパイル」しています。そのコンパイル手順は、縮小版では失敗しています。コンパイルされた縮小コードは次のようになります。

function anonymous(_items,_args) {
var _retval = [], _idx = 0; var n,  t = _args; _coreloop: for (var _i = 0, _il = _items.length; _i < _il; _i++) { n = _items[_i]; 
    //debugger;
    var i = n.option,
        r = t.searchString;

    return 
    n.pctSortKey.key < t.percentCompleteThreshold 
    || 
    r !="" 
        && i.indexOf(r)==-1 
        && i != "Unweighted Response" 
        && i != "Median"
        && i != "Average"
? !1
: !0
; } return _retval; 
}

複数のreturnステートメントに注意してください。

この追加の洞察により、関連する SlickGrid バグを特定することができました。

https://github.com/mleibman/SlickGrid/issues/301

4

1 に答える 1

4

私が見る 1 つの違いは、item.option と args.searchString が、最初の条件が true の場合でも評価されていることです。元のコードには含まれていなかったはずです。

コードに足を踏み入れて、値が何であり、それがどのように作用するかを確認してみましたか?

これは、同じことをしている他の人を救うため、または試してステップインしたい場合に、マングルされていない縮小されたコードです。

function SlickFilter(n,t) {
var i = n.option,
    r = t.searchString;

return 
        n.pctSortKey.key < t.percentCompleteThreshold 
        || 
        r !="" 
            && i.indexOf(r)==-1 
            && i != "Unweighted Response" 
            && i != "Median"
            && i != "Average"
    ? !1
    : !0
}

編集(OPによる)

これで正しい道をたどりましたが、SlickGrid がフィルター関数を「コンパイル」していることがわかりました。コンパイラが時々失敗するという既知の問題があります。実際、コンパイルはオプションであり、この場合は必要ありません。これは、ミニファイアーが既に最適化されたコードを生成しているためです。

https://github.com/mleibman/SlickGrid/issues/301

于 2013-02-22T20:13:31.520 に答える