2016-04-25 49 views
0

我有限定的observablearray爲:KO observablearray:推和分配之間的差異直接

model.permitList = ko.observableArray([]); 

我正在與對象的數組初始化它。還有,當我做這個

model.permitList (arrayOfObjects) 

與差異

當我做這個

for(var i=0; i<arrayOfObjects.length; i++){ 
    model.permitList().push(arrayOfObjects(i)); 
    } 

我知道有,因爲當我嘗試在表格中顯示的數據差異我的意見使用

<tbody data-bind="foreach: model.permitList"> 

只有第一種方法有效。

有人知道這兩種方法的區別嗎?提前致謝。

回答

1

用你的第二種方法,你得到的值是一個實際的Array,而不是ObservableArray

for(var i=0; i<arrayOfObjects.length; i++){ 
    model.permitList.push(arrayOfObjects(i)); 
} 

這將改變可觀察數組。

當你做了model.permitList()返回一個本地Array對象與每個值。當你調用.push時,它會修改該數組。然而,model.permitList是Knockout對象。

+0

仍然不清楚。你能否進一步解釋?謝謝。 – WhatsInAName

1

當你編寫model.permitList(),它就像執行一個getter函數來獲取值。在你的情況下,返回的值是一個本地數組,你的值爲.push。這將導致一個本地數組而不是observableArray。對於淘汰賽視圖綁定的工作和價值的變化,以反映你需要一個observableArray,這隻能當你使用你的變量像一個setter作爲model.permitList (arrayOfObjects)

+0

謝謝,你的解釋幫助我清除了大部分的困惑。 – WhatsInAName