Sto usando una finestra ad eliminazione diretta su una vista per visualizzare un elenco di campi (ad esempio, nome, cognome, ecc.). I campi sono elencati all'interno di un modello a eliminazione diretta utilizzando un array osservabile. Il modello contiene i seguenti campi: nome (input), traduzione (seleziona) e una funzione aggiungi/rimuovi. (Vedi sotto)MVC Knockout JS all'interno della finestra di dialogo 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);
};
Accanto all'elenco seleziona traduzione nel modello, vorrei la possibilità di aggiungere una nuova traduzione che non esiste. Quando si fa clic sul pulsante, voglio aprire una finestra di dialogo dell'interfaccia utente jquery che contiene una vista parziale che utilizza il knockout. La vista parziale conterrà un nome di traduzione, nonché un vecchio valore e un nuovo valore (entrambi i campi di testo). I vecchi e nuovi valori sono una matrice osservabile.
var viewModelPartialDialog = {
TranslationName: ko.observable(),
Values: ko.observableArray([]),
};
var Value = function(id, oldVal, newVal) {
this.ID = id;
this.OldVal = oldVal;
this.NewVal = newVal;
};
Quando l'utente invia modulo della vista parziale, desidero per renderlo un salvataggio chiamare nonché aggiornare le AvailableTranslations matrice osservabile.
Qualcuno può aiutarmi o indicarmi la direzione giusta per raggiungere questo obiettivo?
Grazie per l'esempio. È utile ma non esattamente quello che sto cercando di fare. Nel tuo esempio, non ero in grado di aggiungere un ObservableArray al Prodotto e quindi di avere un modello annidato all'interno del modello di modifica del dialogo.
Tornando al mio esempio originale, vorrei aggiungere nuovi campi in viewModelA, in modo simile a come avete la lista dei prodotti. Tuttavia, invece di modificare il campo nella finestra di dialogo, vorrei aprire una finestra di dialogo per aggiungere una nuova traduzione. La nuova traduzione che si apre nella finestra di dialogo sarebbe un modello di vista separato (viewModelB). Una volta aggiunti il nome e i valori della traduzione, la finestra di dialogo dovrebbe essere posta in modo asincrono e quindi aggiornare la matrice osservabile AvailableTranslations del modello di visualizzazione originale (viewModelA).
Potete fornire un esempio di questa funzionalità?
Bell'esempio. Avevo anche bisogno di sapere quando si è verificato l'evento vicino, quindi ho aggiunto un'associazione per questo. Http://jsfiddle.net/WpnTU/25/ – Anders
Anders, l'avviso onclose si attiva due volte utilizzando Chrome. Ti capita? –