2013-08-22 70 views
1

我的陣列let'say表#1,#表2,表...表#10knockoutJS動態變化的foreach結合

,我想點擊表格的號碼,然後顯示錶的列表項在面板中顯示。

這是代碼段。

HTML,唯一的問題是這條線。我想要動態更改號碼並刷新表格的點擊列表數量。

<div data-bind="foreach: table[number].lines"> // <-- this line 
      <p> 
       <span data-bind="text: name"></span>, 
       <span data-bind="text: qty"></span> @ 
       <span data-bind="text: price"></span> = 
       <span data-bind="text: extendedPrice"></span> 
      </p> 
     </div> 

OBJ陣列

var table = new Array(); 
table[0] = new tableClass('one'); 
table[1] = new tableClass('two'); 
table[2] = new tableClass('three'); 
table[3] = new tableClass('four'); 

申請KO

ko.applyBindings(table, $('#tablePos').get(0)); 

我不想使用更多的部分裝訂。因爲我在這個頁面中使用了太多的綁定。

謝謝大家

+1

'number'是如何設置的?另外,如果可能的話,您應該嘗試在小提琴中重新創建此問題。您沒有向我們展示您的視圖模型的外觀,因此很難看到發生了什麼。 – Tyrsius

回答

2

你應該做一個currentTable觀察到您的視圖模型

var currentTable = ko.observable(table[0]); 

,並將其綁定到currentTable

<div data-bind="foreach: currentTable.lines"> 

,當你改變一個表只是做:

currentTable(table[2]); 

function InitViewModel() { 
    function ViewModelFunction() { 
     this.currentTable = ko.observable(table[0]); 

     ... more observables 

    } 
    window.ViewModel = new ViewModelFunction(); 

    ko.applyBindings(window.ViewModel); 
} 

$(document).ready(function() { 
    InitViewModel(); 
}); 

var table = new Array(); 
table[0] = new tableClass('one'); 
table[1] = new tableClass('two'); 
table[2] = new tableClass('three'); 
table[3] = new tableClass('four'); 

function onSomeEvent(number) { 
    window.ViewModel.currentTable(table[number]); 
} 

... 
as many bindings as you want to observables in the ViewModel 
... 
+0

謝謝,我知道這個方法。但我必須做一個更多的部分綁定,還有一個模型。有沒有可能不使用這種方法?或任何其他解決方案? – riseres

+0

您可以在ViewModel中擁有多個可視化對象,或者 - 您可以將具有不同ViewModel的不同DOM元素綁定到不同的ViewModel,您可以進一步指定我可以提供的幫助:),如果有其他方法 - 這是您如何使用挖空,我不知道任何其他的方法來淘汰賽 –

1

您可以將表保存在observableArray中,並通過索引來檢索它們。

self.SelectedIndex = ko.observable(0); // save index of selected table 
self.List = ko.observableArray([]); // list to save your tables 

// Retrieve your selected table by ko.computed 
self.SelectedList = ko.computed(function() { 
    return self.List()[self.SelectedIndex()]; 
}); 

// ... init your tables or sth below 

這是the way我解決了您的問題。當我顯示數據時有點複雜,所以不要注意它們。