2016-06-21 43 views
0

我試圖獲得options或者理想情況下dynamicTableinitializeTable傳遞到applyTableFilters函數,我在獲取期望值時遇到問題。我使用List.js來創建動態表,並且我需要傳遞或重新創建dynamicTable對象,以便我可以繼續並使用它來過濾表。將參數從一個函數傳遞到另一個而不調用它

下面是從HTML表格創建List.js對象的函數:

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

我已經嘗試不同的方法來將變量傳遞給下面的功能。我試過.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; 
    }); 
} 

我使用:因爲我在兩者之間

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

切換如果結束工作等,不需要兩者都通過。我總是得到一個傳入的鼠標事件,這甚至不是我正在尋找的正確類型的對象。我怎樣才能讓正確的對象通過?第一個函數中的所有值也不是空的,並且按預期填充,所以它不是原始變量未定義或爲空。提前致謝。

+0

如何才能創建一個函數範圍內,你可以包裝該功能與其他功能預先包括你想要的參數值。然後在需要時使用其他參數調用包裝函數。這裏有一個簡單的[JSFiddle示例](https://jsfiddle.net/BloodyKnuckles/76bq0pyw/)我的意思。 – bloodyKnuckles

+0

@bloodyKnuckles我曾嘗試過這樣做,但我不明白在這種情況下如何工作。我將有一個'shell()'函數示例,它接受'dynamicTable'變量並將其饋入最後一個函數,但爲了提供它,它需要我需要傳入的相同變量,這是怎麼回事工作?防爆。 '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

相關問題