2011-04-07 22 views
15

¿Cómo utilizaría un diálogo de interfaz de usuario jQuery para confirmar si desean eliminar una fila de una lista dentro de una plantilla KnockoutJS?Uso de una plantilla KnockoutJS vinculante con el cuadro de diálogo de confirmación de jQuery UI

Según lo veo, las demostraciones Knockout muestran una plantilla que representa cada fila en una grilla. El botón Eliminar llama a la función viewModel.remove() que pasa en el objeto de la fila para eliminar. Dentro de la función remove(), se llama al this.Gifts.Remove() con los datos pasados ​​a la función como parámetro.

Mi problema es que quiero mostrar un cuadro de diálogo de jQuery para solicitar la confirmación de si se debe eliminar una fila. El diálogo JQuery funciona sobre la base de una función de configuración que configura el diálogo y su función de eliminación de antemano.

Cuando hago clic en mi enlace de eliminación en la plantilla, se abre el diálogo, pero ¿cómo paso los datos de la plantilla a la función de eliminación de diálogo, ya que está completamente desacoplado del mecanismo de la plantilla?

Respuesta

20

Supongo que el cuadro de diálogo es de jQuery UI. Si es así, entonces que retire sería algo como esto:

removeItem: function(item) { 
    $("#dialog-confirm").dialog({ 
     resizable: false, 
     height:140, 
     modal: true, 
     buttons: { 
      "Delete item": function() { 
       $(this).dialog("close"); 
       viewModel.items.remove(item); 
      }, 
      Cancel: function() { 
       $(this).dialog("close"); 
      } 
     } 
    }); 
} 

Así, el botón "Eliminar elemento" sería cerrar el diálogo y también eliminar el artículo de su observableArray.

muestra de trabajo aquí: http://jsfiddle.net/rniemeyer/CLxsV/

Editar: mejor muestra utilizando los enlaces de aquí: http://jsfiddle.net/rniemeyer/WpnTU/

+0

perfecto! Gracias por la ayuda. – jaffa

+0

¿Hay alguna manera de probar que el método de diálogo fue llamado con los parámetros correctos? Sería capaz de probar las interacciones entre los métodos en el modelo y la interfaz de usuario jQuery. Por ejemplo, para asegurarse de que los botones estaban encuadernados correctamente, ese modal era verdadero, etc. ¿Hay una buena manera de hacerlo? Gracias –

+0

Sugeriría mejor usar un enlace knockout personalizado como en este ejemplo: http://stackoverflow.com/questions/7436160/mvc-knockout-js-inside-jquery-dialog – VikciaR

Cuestiones relacionadas