2016-06-21 21 views
0

、またはinitializeTableからapplyTableFiltersに渡されるのが理想的です。期待値を取得できません。私はList.jsを使ってテーブルを動的にしています。dynamicTableオブジェクトを渡すか再作成する必要がありますので、テーブルをフィルタリングするために使用してください。私は以下の関数に変数を渡すためにさまざまな方法を試してみた呼び出すことなく1つの関数から別の関数に引数を渡す

function initializeTable(options) { // initializes table to be dynamic using List.js functions 
    var dynamicTable = new List("table-content", options); 

    dynamicTable.on("updated", function (list) { // writes a message to the user if no results are found 
     if (list.matchingItems.length == 0) { 
      document.getElementById("no-results").style.display = "block"; 
     } 
     else { 
      document.getElementById("no-results").style.display = "none"; 
     } 
    }); 

    console.log(dynamicTable); 
    console.log(options); 
    console.log(arguments.length); 

    applyTableFilters.bind(); 
} 

:ここ

は、HTMLテーブルからList.jsオブジェクトを作成する関数です。私は .callapplyTableFilters(args).applyを試しましたが、ボタンからのクリックイベントがオフになったとき(ここには表示されていません)にのみ、ここから関数を実行したくないという問題があります。

function applyTableFilters(dynamicTable) { 
    var form = document.getElementById("filter-form"); 

    //console.log(options); 

    //var dynamicTable = new List("table-content", options); 

    console.log(dynamicTable); 

    var filters = form.querySelectorAll('input[type="checkbox"]:checked'); 

    dynamicTable.filter(function (item) { 
     console.log(item); 
     console.log(item._values); 

     if (item.values().id == 2) { 
      return true; 
     } 

     else { 
      return false; 
     } 

     //var filterStrings = []; 

     //console.log(filters); 

     //for (var i = 0; i < filters.length; i++) { 
     // var filterVal = filters[i].value; 
     // var filterString = "(" + item.values().column == filterVal + ")"; // filterVal.contains(item.values().column) || 
     // filterStrings.push(filterString); 

     // console.log(filterVal); 
     // console.log(filterString); 
     //} 

     //console.log(filterStrings); 

     //var filterString = filterStrings.join(" && "); 

     //console.log(filterString); 
     //return filterString; 
    }); 
} 

私が使用した:

この

は、私はそれを使用してフィルタ機能を作るためにオブジェクトを渡して続行したい機能であるI以来、両者の間に

applyTableFilters.bind(this, dynamicTable/options); 
applyTableFilters.bind(null, dynamicTable/options); 
applyTableFilters.bind(dynamicTable/options); 

切り替え私はいつもマウスのイベントが渡され、それは私が探しているオブジェクトの正しいタイプでもありません。適切なオブジェクトを渡すにはどうすればよいですか?また、最初の関数のすべての値は空ではなく、期待どおりに値が設定されているため、元の変数は未定義またはnullではありません。前もって感謝します。

+0

方法。その後、必要に応じて他のargsでラッパー関数を呼び出します。ここでは単純な[JSFiddleの例](https://jsfiddle.net/BloodyKnuckles/76bq0pyw/)という意味です。 – bloodyKnuckles

+0

@bloodyKnuckles前にこれをやろうとしましたが、この場合どのように動作するのか分かりません。 'shell()'関数を使って 'dynamicTable'変数を取り込み、それを最後の関数に渡しますが、それをフィードするためには、渡す必要のある同じ変数が必要です。作業? Ex。 'var dynamicTable = shell()'しかし、パラメータを渡す必要があります、私が意味するものを知っている? – LaLaLottie

答えて

0

initializeTable関数から、applyTableFilters関数を必要な引数でラップする関数を返します。

次に、返された関数を後で実行されるvarに代入します。あなたが欲しい引数の値を予め含めることができます関数スコープを作成するために、別の関数とその関数をラッピングについて

function initializeTable(options) { 
    var dynamicTable = new List("table-content", options); 
    // other stuff 

    return function() { 
     applyTableFilters(dynamicTable) 
    } 
} 

// other stuff 

var applyTableFiltersPrep = initializeTable(options) 

// later, when you want to execute... 
applyTableFiltersPrep() 

JSFiddle example

+0

ありがとうございます。最初は、これが私が 'initializeTable'と呼んでいた別の関数(投稿されていない)と衝突するかもしれないと心配しましたが、これはうまくいくようです。 – LaLaLottie

関連する問題