Jak dodać wszystkie wartości do observableArray
w jednym czasie? Dodawanie wartości w pętli działa bardzo wolno w moim przypadku. Oto przykład jsfiddle. jsfiddlenokaut obserwowalnyArray wydajność
Odpowiedz
Skoro oczyszczaniu całą zaobserwowania tablicę, jeden sposób można to osiągnąć jest:
var viewModel = {
name: "base",
addingValue:new ko.observable(),
someArr: new ko.observableArray(["123","432","sdafasd","xrere"]),
add: function()
{
this.someArr.push(this.addingValue());
},
updateSomeArr:function()
{
var temp = [];
for(var i=0;i<5;i++)
{
temp.push("555565");
}
this.someArr(temp);
}
}
Jest już wybrana odpowiedź, ale myślałem, że po pomoże. Można wyłączyć zachowanie obserwacji wykonując swoją zaobserwowania tablicę, aby uzyskać podstawową realizację tablicy:
var underlyingArray = viewModel.someArr();
Można następnie dodać elementy do underlyingArray
bez wystrzelenie someArr
wydarzenia. Po zakończeniu dodawania elementów, zadzwoń:
viewModel.someArr.valueHasMutated();
To spowoduje, że zdarzenie na ogień powiadamiania wszystkie obserwable zależne viewModel.someArr().
var myArray = ko.observableArray([]);
var valuesToInsert = [1,2,3];
myArray.push.apply(myArray, valuesToInsert);
to wszystko
Chcesz wiedzieć, dlaczego odpowiedź została odrzucona. – AGS
Nadal nie rozumiem, dlaczego najbardziej elegancka i poprawna odpowiedź została odrzucona :). Byłbym wdzięczny za wyjaśnienie. – AGS
To jest naprawdę najlepsze podejście, aby przesłać wszystkie elementy do tablicy na raz.Tutaj jest post na jego wykorzystanie http://www.knockmeout.net/2012/04/knockoutjs-performance-gotcha.html –
mam jedną notatkę o dodawanie elementów do tablicy problemu z wydajnością, że należy użyć ARRAY_NAME [array_name.length-1] = swój przedmiot; ta linia jest szybsza niż metoda push – Marwan
Czy różnica jest naprawdę duża? – Neir0
Myślę, że tak, zobacz ten artykuł http://www.scottlogic.co.uk/2010/javascript-array-performance/ i przepraszam, pomyliłem jego nazwę array_name [array_name.length] = Twój przedmiot – Marwan