2011-09-06 10 views

回答

78

您應該能夠使用本地JavaScript splice方法 -

viewModel.SomeItems.splice(2,0,someNewItem); 

文檔在這裏 - https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice

例這裏(對於剔除特定) - How to insert an item into an array at a specific index?

來自Knockout文檔 -

對於修改數組的內容,如推 拼接功能,KO的方式自動觸發依賴跟蹤 機制,使所有註冊的偵聽器通知更改, 和您的用戶界面會自動更新。

+6

感謝:

ko.observableArray.fn.setAt = function(index, value) { this.valueWillMutate(); this()[index] = value; this.valueHasMutated(); } 

這甚至與工作。拼接工作。對於淘汰賽用戶,如果您想查找基於現有項目插入新項目的索引,則ko.utils.arrayIndexOf也很有用。 –

+1

這不適用於稀疏數組,至少它不適合我在Chrome中使用。請參閱下面的答案 –

17

淘汰賽使用

viewModel.SomeItems.unshift(someNewItem); 

參見:http://knockoutjs.com/documentation/observableArrays.html

+14

這將項目插入數組的開頭,所以如果您想要在中間插入一個項目,這沒有幫助。 –

+1

我不知何故錯過了將它插入陣列中任何位置的部分。是的,這隻有在你想插入到開始時纔有效。對於那個很抱歉。 – TravCav

+0

MHH我似乎無法創建插入 – konzo

12

我做這工作很好地爲我這個擴展功能。如果我將數據添加到稀疏數組的末尾,則拼接對我而言不起作用。

var a = ko.observableArray(['a', 'b', 'c']); 
a.setAt(42, 'the answer'); 
+2

如果你想要做insertAt而非setAt,只需切換'當酷動畫這個()[指數] =值;''到this.splice(索引,0值); '。感謝Adam! –

相關問題