Ich versuche, Inline-Bearbeitung mit Vorlagen zu implementieren. Auf meinem Viewmodel habe ich eine Methode: self.changeMode. Ich trigse das von einem Knopfklickereignis (innerhalb der Schablone) aus. Der Datenparameter, der an die Funktion changeMode übergeben wird, enthält die erwarteten Daten, aber ich muss die Observable ändern. Wie mache ich das?Knockout Wie setze ich Wert in Kind Observable
var MyViewModel = function (data) {
var self = this;
self.managingAgentId = ko.observable(data.managingAgentId);
self.companyName = ko.observable(data.companyName);
self.companyNumber = ko.observable(data.companyNumber);
self.isActive = ko.observable(data.isActive);
self.agents = ko.observableArray(data.agents);
// Change to Edit or Display mode
self.changeMode = function (data,event) {
event.preventDefault();
// => need to change mode here!
};
}
$(function() {
$.ajax({
type: "GET",
url: ma.Urls.LoadManagingAgent
}).done(function (result) {
$.each(result.agents, function (index, element) {
element.mode = "display";
});
ko.applyBindings(new MyViewModel(result));
}).error(function (response) {
addMessage(response);
});
});
<script type="text/html" id="display">
<td data-bind="text: managingAgentMemberId"></td>
<td data-bind="text: applicationUser.userName"></td>
<td data-bind="text: applicationUser.email"></td>
<td data-bind="text: applicationUser.emailConfirmed"></td>
<td data-bind="text: isActive"></td>
<td>
<button class="btn btn-success btn-sm" data-bind="click:$root.changeMode">
<i class="fa fa-edit"></i>
Edit
</button>
</td>
</script>
<script type="text/html" id="edit">
<td data-bind="text: managingAgentMemberId"></td>
<td data-bind="text: applicationUser.userName"></td>
<td data-bind="text: applicationUser.email"></td>
<td data-bind="text: applicationUser.emailConfirmed"></td>
<td><input type="checkbox" data-bind="checked: isActive" /> </td>
<td>
<button class="btn btn-success btn-sm kout-update">
<i class="fa fa-save"></i>
Update
</button>
<button class="btn btn-danger btn-sm kout-cancel">
<i class="fa fa-stop"></i>
Cancel
</button>
</td>
</script>
nicht sicher, ich verstehe, was du meinst. applyBindings wird auf dem zurückgegebenen Ajax aufgerufen? – Greg
Ich habe den Kommentar ca 5 Sekunden nach dem Schreiben gelöscht, es scheint etwas Verzögerung zu geben, bis Sie das Löschen sehen. – Tomalak
Worauf möchten Sie den 'Modus' ändern? Auch "Mode" ist nicht einmal in Ihrem Viewmodel beobachtbar. – Tomalak