Czy istnieje sposób na mapowanie z/do obserwowanego obiektu POCO i knockoutjs?Mapowanie knockoutjs z/do obiektu POCO
Mam klasy Uwaga:
public class Note
{
public int ID { get; set; }
public string Date { get; set; }
public string Content { get; set; }
public string Category { get; set; }
public string Background { get; set; }
public string Color { get; set; }
}
i to jest mój javascript:
$(function() {
ko.applyBindings(new viewModel());
});
function note(date, content, category, color, background) {
this.date = date;
this.content = content;
this.category = category;
this.color = color;
this.background = background;
}
function viewModel() {
this.notes = ko.observableArray([]);
this.newNoteContent = ko.observable();
this.save = function (note) {
$.ajax({
url: '@Url.Action("AddNote")',
data: ko.toJSON({ nota: note }),
type: "post",
contentType: "json",
success: function(result) { }
});
}
var self = this;
$.ajax({
url: '@Url.Action("GetNotes")',
type: "get",
contentType: "json",
async: false,
success: function (data) {
var mappedNotes = $.map(data, function (item) {
return new note(item.Date, item.Content, item.Category, item.Color, item.Background);
});
self.notes(mappedNotes);
}
});
}
ignorować faktu, że funkcja oszczędzania nie jest używany (w celu uproszczenia kodu tutaj).
Tak więc, po załadowaniu strony nazywam serwer i pobieram listę obiektów Note i mapuję je w javascript. Zwróć uwagę, że identyfikator nie jest odwzorowany, ponieważ nie potrzebuję go w moim widoku.
Na razie dobrze widzę notatki na ekranie, ale jak mogę zapisać notatki z powrotem na serwer?
Próbowałem przekonwertować notatkę (Im zapisuję tylko nową notatkę, a nie całą kolekcję) na JSON i wysłać ją do kontrolera, ale nie wiem, jak uzyskać dostęp do notatki w kontrolerze. Próbowałem:
public string AddNote(string date, string content, string category, string background, string color)
{
// TODO
}
, ale nie działa. Chcę mieć coś takiego:
public string AddNote(Note note) {}
(Btw, co jest najlepszym sposobem powrotu na które po prostu zapisać dane na DB unieważnić?)
tak, to jak to zrobić? Próbowałem wtyczki knockout.mapping, ale jest to dość dezorientujące i nie działa to dla mnie.
Dziękuję.
Niesamowite zwrotna Epic działa idealnie ale: czy możesz wyjaśnić mi ostatni akapit a .. jak załadować z serwera Ręczne mapowanie jak tu robi Im albo muszę spróbować wtyczki mapowania?? –
Tak, +1 za wspaniałą odpowiedź, jest bardzo wyraźny z doskonałymi przykładami –
Wow - świetna robota. –