Tengo una colección ObservableArray
que se une a la tabla HTML con opción de edición masiva (MVC3), cada vez que el usuario acierta la confirmación solo quería enviar las filas modificadas de la colección en lugar de enviar toda la lista del modelo de vista, indique si existe alguna forma mejor de rastrear o filtrar solo las filas modificadas.La mejor manera de obtener únicamente filas modificadas de observableArray (cuando hay opción de edición masiva)
Respuesta
Aquí está una post sobre la creación de una bandera sucia en Knockout que hará un seguimiento de los cambios en todos los observables en un objeto.
Normalmente, debe agregar una bandera sucia a cada elemento en su matriz en una función de constructor o recorrer cada elemento y agregar el indicador. Luego, puede crear un observable calculado para representar solo los elementos modificados para enviar de vuelta al servidor.
Aquí es un ejemplo que muestra una bandera sucia en cada artículo y un observables computarizada que contiene sólo los elementos sucios: http://jsfiddle.net/rniemeyer/wauwn/
No es una tarea tan trivial como puede parecer.
Al principio, la matriz observable solo maneja la modificación de array (insertar, eliminar, reordenar, etc.) no la modificación del elemento.
En segundo lugar, es probable que necesite un indicador especial como 'isModified' en su modelo que se une a cada fila de la tabla.
Luego debe establecer ese indicador si parte del enlace se actualizó. Knockoutjs observables proporciona un método de suscripción que permite llamar a su propia función cuando se actualiza observables. Eche un vistazo a la página http://knockoutjs.com/documentation/observables.html en la parte inferior hay una sección llamada 'suscribirse explícitamente a observables'.
Hay un proyecto rápido de código que realiza esa tarea
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;
}
Compruebe que suscribirse es una función para estar seguro, que ahora sólo está probando que existe una propiedad . La prueba debe ser: 'result.hasOwnProperty (prop) && typeof result [prop] ===" function "' – froginvasion
- 1. ¿Cuál es la mejor manera de obtener notificaciones modificadas para la selección de UITextField?
- 2. obtiene el número de filas modificadas después de ejecutar sqlite3
- 3. ¿Hay una mejor opción de diseño?
- 4. eliminar de observableArray- knockoutjs
- 5. ¿La mejor manera de obtener imágenes?
- 6. Subconsultas de SQL: ¿hay una manera mejor?
- 7. ¿La mejor manera de insertar varias filas en Oracle?
- 8. Cómo deshabilitar la edición de algunas celdas en la edición de filas de JQGrid?
- 9. La actualización requiere un UpdateCommand válido cuando se aprueba la colección DataRow con filas modificadas
- 10. ¿Una mejor manera de probar el valor de una Opción?
- 11. ¿Hay una mejor manera de transmitir matrices?
- 12. KnockoutJS ObservableArray datos de agrupación
- 13. ¿Hay una mejor manera de depurar SQL?
- 14. ¿Cuál es la mejor manera de implementar un búfer para un control de edición de texto?
- 15. ¿Hay una mejor manera de encontrar la medianoche mañana?
- 16. ¿Hay alguna manera de cancelar programáticamente la edición de un cuadro de texto?
- 17. ¿SIMD vale la pena? ¿Hay alguna opción mejor?
- 18. La mejor manera de obtener una etiqueta HTML variable
- 19. la mejor manera de obtener buenos resultados con consultas sql
- 20. La mejor manera de obtener el objetivo original
- 21. Edición de filas de Gridview: vinculación dinámica a DropDownList
- 22. ¿Hay una mejor manera de ocultar BackBarButtonItem que esto?
- 23. ¿Mejor manera de verificar si hay elementos en la lista?
- 24. ¿La mejor manera de clonar observables?
- 25. ¿Cuál es la mejor manera de evitar perder el foco de TextBox cuando hay un error de validación?
- 26. La mejor manera de obtener propiedades secundarias con GetProperty
- 27. ¿La mejor manera de obtener spidermonkey js en Ubuntu?
- 28. ¿La mejor manera de obtener una cita con .NET?
- 29. ¿La mejor manera de obtener el tiempo actual mediante API?
- 30. Delphi - ¿Hay una mejor manera de obtener abreviaturas estatales de nombres de estado
su solución es perfecta. ¿Pensaste en enviar este ko.dirtyFlag al equipo ko? –
Estoy en el equipo central de ko (solo 3 personas con Steve Sanderson el desarrollador primario). El pensamiento actual es generalmente mantener el núcleo apretado y poner cosas como esta en complementos. Sin embargo, podría considerar poner esto como un proyecto apropiado. –