2016-06-21 85 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

相关问题