Estoy usando knockout js en una vista para mostrar una lista de campos (es decir, nombre, apellido, etc.). Los campos se enumeran dentro de una plantilla knockout utilizando una matriz observable. La plantilla contiene los siguientes campos: nombre (entrada), traducción (seleccionar) y una función para agregar/eliminar. (Ver más abajo)MVC knockout JS dentro del cuadro de diálogo JQuery
var viewModel = {
Fields: ko.observableArray([new Field(2, "First Name", 1), new Field(3, "Last Name", 2)]),
AvailableTranslations: ko.observableArray([new Translation(1, "Prefixes"), new Translation(2, "Suffixes")]),
remove: function(item) {
ko.utils.arrayRemoveItem(this.Fields, item)
},
add: function() {
this.Fields.push(new Field(0, "", ""));
}
};
var Translation = function(id, name) {
this.ID = id;
this.Name = name;
};
var Field = function(id, name, translationID){
this.ID = ko.observable(id);
this.Name = ko.observable(name);
this.TranslationID = ko.observable(translationID);
};
Al lado de la traducción en la lista de selección en la plantilla, me gustaría una opción para añadir una nueva traducción que no existe. Cuando se hace clic en el botón, quiero abrir un cuadro de diálogo de la IU de jquery que contiene una vista parcial que utiliza el knockout. La vista parcial contendrá un nombre de traducción, así como un valor antiguo y un nuevo valor (ambos campos de texto). Los valores antiguos y nuevos son una matriz observable.
var viewModelPartialDialog = {
TranslationName: ko.observable(),
Values: ko.observableArray([]),
};
var Value = function(id, oldVal, newVal) {
this.ID = id;
this.OldVal = oldVal;
this.NewVal = newVal;
};
Cuando el usuario envía el formulario de la vista parcial, me gustaría hacer una serie observables salvar a llamar, así como actualizar los AvailableTranslations.
¿Alguien puede ayudarme o señalarme en la dirección correcta para lograr esto?
Gracias por el ejemplo. Es útil, pero no es exactamente lo que estoy tratando de hacer. En su ejemplo, no pude agregar un Arreglo observable al Producto y luego tener una plantilla anidada dentro de la plantilla de edición del diálogo.
Volviendo a mi ejemplo original, me gustaría agregar nuevos campos en viewModelA, similar a cómo tiene la lista de productos. Sin embargo, en lugar de editar el campo en el cuadro de diálogo, me gustaría abrir un cuadro de diálogo para agregar una nueva traducción. La nueva traducción que se abre en el cuadro de diálogo sería un modelo de vista separado (viewModelB). Una vez que se agreguen el nombre y los valores de la traducción, el diálogo se publicará de forma asíncrona y luego se actualizará la matriz observable del modelo de vista original (viewModelA) AvailableTranslations.
¿Puede proporcionarnos un ejemplo de esta funcionalidad?
ejemplo Niza. También necesitaba saber cuándo se dispara el evento cercano, así que agregué un enlace para esto ... http://jsfiddle.net/WpnTU/25/ – Anders
Anders, la alerta onclose se dispara dos veces con Chrome. ¿Te sucede a ti? –