Mam kolekcję ObservableArray
, która wiąże się z tabelą HTML z opcją edycji zbiorczej (MVC3), za każdym razem, gdy użytkownik wykonuje zatwierdzenie, które chciałem wysłać tylko zmodyfikowane wiersze z kolekcji zamiast wysyłać całą listę viewmodel, radzę wybrać najlepszy sposób śledzenia lub filtrowania tylko zmodyfikowanych wierszy.Najlepszy sposób na uzyskanie tylko zmodyfikowanych wierszy z obserwowalnego pola (gdy dostępna jest opcja edycji zbiorczej)
Odpowiedz
Oto post o tworzeniu brudną flagę nokautem które będą śledzić zmiany we wszystkich obserwabli w obiekcie.
Zazwyczaj dodajesz brudną flagę do każdego elementu w swojej tablicy w funkcji konstruktora lub przechodzisz przez pętlę przez każdy element i dodajesz flagę. Następnie można utworzyć obliczone obserwowalne, aby reprezentować tylko zmienione elementy do wysyłania z powrotem do serwera.
Oto przykład, który pokazuje brudną flagę na każdej pozycji i obliczony zaobserwować, że zawiera tylko brudne elementy: http://jsfiddle.net/rniemeyer/wauwn/
To nie jest tak trywialne zadanie, jak może wyglądać.
Najpierw tablica obserwowalna obsługuje tylko modyfikację tablicy (wstawianie, usuwanie, zmiana kolejności itp.), A nie modyfikację elementu.
Po drugie, prawdopodobnie potrzebujesz specjalnej flagi, takiej jak "isModified" w modelu, która wiąże się z każdym wierszem tabeli.
Następnie należy ustawić tę flagę, jeśli część wiązania została zaktualizowana. Obserwacje Knockoutjs umożliwiają subskrybcję metody, która pozwala na wywoływanie własnej funkcji podczas aktualizacji obserwowanych obiektów. Spójrz na stronę http://knockoutjs.com/documentation/observables.html u dołu znajduje się sekcja "wyraźnie subskrybuj obserwowalne".
Jest szybki projekt kodu, który wykonuje to zadanie
function CreateArrayElementViewModel(inputData) {
// Creating our view model
var result = {
prop : ko.observable(inputData.prop),
val : ko.observable(inputData.val),
isModified: false // This property would be true if entity was edited
};
// Iterate over all properties and subscribe to knockoutjs observables
for(prop in result) {
if (typeof(result[prop].subscribe) != 'undefined') {
result[prop].subscribe(function() { result.isModified = true; });
}
}
return result;
}
Sprawdź, zapisz to funkcja, aby mieć pewność, jesteś tylko testowanie że właściwość istnieje . Test powinien brzmieć: 'result.hasOwnProperty (prop) && typeof result [prop] ===" function "' – froginvasion
- 1. Clojure najlepszy sposób na uzyskanie wielu wątków?
- 2. IDataReader - Jakikolwiek sposób na uzyskanie całkowitych wierszy?
- 3. Najlepszy sposób na uzyskanie oryginalnego celu
- 4. Jaki jest najlepszy sposób na uzyskanie równoległej nieskończonej pętli?
- 5. Jaki jest najlepszy sposób na uzyskanie liczb losowych w NumPy?
- 6. Orchard CMS: Właściwy sposób na uzyskanie wartości pola z widoku?
- 7. Najlepszy sposób na uzyskanie dostępu do sąsiednich komponentów/pól
- 8. angular2 - Najlepszy sposób na zakończenie obserwowalnego interwału, gdy zmienia się ścieżka
- 9. Najlepszy sposób na uzyskanie wartości z kolekcji według indeksu
- 10. Najlepszy sposób na uzyskanie obiektu typu z łańcucha w .NET
- 11. Podnoszenie elementów w trybie progresywnym, gdy tylko dostępna jest kolejka.
- 12. Jak zasubskrybować zmianę obserwowalnego pola
- 13. Najlepszy sposób na uzyskanie pliku Czas modyfikacji w sekundach
- 14. Najlepszy sposób dla programistów do edycji XAML
- 15. Najlepszy sposób na uzyskanie Matlab <-> Interfejs C++
- 16. Jaki jest najlepszy sposób edycji plików .mht (archiwum sieci)?
- 17. Najlepszy sposób na uzyskanie aktualnej pogody przez interfejs API?
- 18. Najlepszy sposób na uzyskanie identyfikatora komputera w systemie Linux?
- 19. Czy jest jakiś skrótowy sposób na uzyskanie float z tablicy?
- 20. Najlepszy sposób na uzyskanie tożsamości wstawionego wiersza w serwerze połączonym?
- 21. C# Najlepszy sposób na uzyskanie głębokości folderu dla danej ścieżki?
- 22. Jak dokonać edycji wierszy ttk.Treeview?
- 23. Jak powrócić, gdy opcja jest pusta?
- 24. Jaki jest najlepszy sposób na uzyskanie ostatnich elementów N z tablicy Perla?
- 25. Próba zlokalizowania i zbiorczej edycji cen WooCommerce w MySQL
- 26. Łatwy sposób na uzyskanie tytułów wiktionarnych tylko w jednym języku?
- 27. Jaki jest najlepszy sposób utworzenia pola wyboru UIButton?
- 28. Jaki jest najlepszy sposób na uzyskanie akapitów w bloku tekstowym WPF? (znaki nowej linii?)
- 29. Jaki jest najlepszy sposób na zapytanie o liczbę wierszy z danych podstawowych?
- 30. Jaki jest najlepszy sposób na uzyskanie optymalnej liczby tematów dla modelu LDA za pomocą Gensim?
twoje rozwiązanie jest idealne. Czy myślisz o przesłaniu tego ko.dirtyFlag do zespołu ko? –
Jestem w zespole ko core (tylko 3 osoby ze Stevem Sandersonem, głównym programistą). Obecne myślenie ma na ogół na celu utrzymanie ścisłego sedna i wprowadzenie takich rzeczy do wtyczek. Może jednak uważam to za odpowiedni projekt. –