2013-04-21 29 views
3

我正在創建一個動態表,說有列A,B,C和填充數據,我也有1列表框,我有A,B,C作爲複選框,所以基於選定的複選框我正在顯示列,例如我從列表框中選擇了B,C,然後我可以創建僅用於B,C而不是A的表格,爲此場景創建jquery模板,並使用Knockout.js進行數據綁定,這是我尋找的內容,但我懷疑模板是否可以在這種情況下使用,因爲我的表太動態..所以我的問題是是否有可能在這種情況下使用淘汰賽。如果沒有,那麼我使用純jQuery的方法將是正確的選擇。動態表使用Knockout.js

如果我下面的jQuery方法我分開查看和視圖模型將是一個問題,因爲在這種情況下,查看車型將擁有jQuery的相關視圖操作

有這方面的樣本將是非常有用的想法。

感謝和問候, Sajesh南比亞爾

回答

10

您可以使用敲除來輕鬆地隱藏/顯示錶格列。一個簡單而有效的方法是使用列上的visible綁定來控制其可見性。

以下是一個演示的想法小提琴:http://jsfiddle.net/Ex9J9/42/

編輯 - 更新小提琴修復404錯誤與淘汰賽資源

觀點:

<h4>Select Columns:</h4> 
<ul data-bind="foreach: gridOptions.columns"> 
    <li> 
     <label> 
      <input type="checkbox" data-bind="checked: isVisible" /> <span data-bind="text: header"></span> 
     </label> 
    </li> 
</ul> 
<hr> 
<table> 
    <thead> 
     <tr data-bind="foreach: gridOptions.columns"> 
      <th data-bind="visible:isVisible, text: header"></th> 
     </tr> 
    </thead> 
    <tbody data-bind="foreach: people"> 
     <tr data-bind="foreach: $parent.gridOptions.columns"> 
      <td data-bind="text: $parent[dataMember], visible:isVisible"></td> 
     </tr> 
    </tbody> 
</table> 

視圖模型:

var vm = { 
    gridOptions: { 
     columns: [{ 
      header: 'First Name', 
      dataMember: 'firstName', 
      isVisible: ko.observable(true) 
     }, { 
      header: 'Last Name', 
      dataMember: 'lastName', 
      isVisible: ko.observable(true) 
     }] 
    }, 

    people: [{ 
     firstName: 'Bert', 
     lastName: 'Bertington' 
    }, { 
     firstName: 'Charles', 
     lastName: 'Charlesforth' 
    }, { 
     firstName: 'Denise', 
     lastName: 'Dentiste' 
    }] 
}; 

ko.applyBindings(vm); 
0

如果選項是小的,如3左右,你可以創建三個模板,然後在頁面上做這樣的事情:

<!-- ko 'if': AIsSelectedAndNotBOrC == true --> 
//display the tmeplate 
<!-- /ko --> 

//執行此操作爲您的其他變化...

這將工作,但如果你有很多變化,那麼它可能太麻煩。