Come aggiungere tutti i valori a observableArray
in una volta? L'aggiunta di valori in loop funziona molto lentamente nel mio caso. Ecco l'esempio di jsfiddle. jsfiddlead eliminazione diretta osservabile Prestazioni dell'array
risposta
Dal momento che stai sgombrare l'intero array osservabile, un modo è possibile raggiungere questo obiettivo è:
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);
}
}
haha abbastanza semplice. Grazie – Neir0
Nessun problema. C'è anche un modo per "disattivare" il comportamento osservativo, aggiornare il modello e poi riaccenderlo - ma non riesco a trovare la pagina per farlo. –
utilizzando nome_array [nome_array.length-1] = elemento; è più veloce del metodo push – Marwan
Esiste già una risposta selezionata, ma ho pensato che la seguente avrebbe aiutato. È possibile disattivare il comportamento osservando eseguendo l'array osservabile per ottenere l'attuazione di matrice sottostante:
var underlyingArray = viewModel.someArr();
È quindi possibile aggiungere elementi underlyingArray
senza sparare fuori someArr
eventi. Una volta che hai finito di aggiungere elementi, chiamare:
viewModel.someArr.valueHasMutated();
Questo farà sì che l'evento al fuoco notificare tutte le osservabili dipendono da viewModel.someArr().
var myArray = ko.observableArray([]);
var valuesToInsert = [1,2,3];
myArray.push.apply(myArray, valuesToInsert);
il gioco è fatto
Vorrei sapere perché la risposta è stata downvoted. – AGS
Ancora non capisco perché la risposta più elegante e corretta è stata downvoted :). Sarei grato per una spiegazione. – AGS
Questo è davvero l'approccio migliore per trasferire tutti gli elementi in un array in una sola volta.Qui è un post sul suo utilizzo http://www.knockmeout.net/2012/04/knockoutjs-performance-gotcha.html –
ho una nota sugli elementi Aggiunta a un problema di prestazioni matrice che si dovrebbe usare nome_array [array_name.length-1] = il vostro articolo; questa linea è più veloce del metodo push – Marwan
La differenza è davvero grande? – Neir0
penso di sì vedere questo articolo http://www.scottlogic.co.uk/2010/10/javascript-array-performance/ e mi dispiace averlo sbagliato nome_array [nome_array.length] = il tuo articolo – Marwan