Ich bin neu in Knockout und ich habe Probleme zu verstehen, wie man ein View-Modell "bearbeitet", wenn man das Knockout-Mapping-Plugin benutzt. Hatte gehofft, dass mir jemand helfen könnte. Ich habe eine Liste mit Listen. Unten ist ein ähnliches Beispiel. Grundsätzlich mehrere Gruppen mit mehreren Dateien.Wie fügt man dem Knockout-Mapping-View-Modell Zeug hinzu?
[
{
"group": "Alice",
"files": [
{"filename": "red.mp3", "length": 5},
{"filename": "blue.mp3","length": 6},
{"filename": "yellow.mp3","length": 5}
]
},
{
"group": "Bob",
"files": [
{"filename": "green.mp3","length": 2},
{"filename": "purple.mp3","length": 10}
]
}
]
Und ich kann das Grundmodell von diesem erhalten:
$.getJSON('api/get-list', function(data)
{
view = ko.mapping.fromJS(data);
ko.applyBindings(view);
});
Es funktioniert, und ich habe es geschafft, es in HTML zu verbinden, so dass es sichtbar ist, und alles ist in diesem Bereich in Ordnung. Aber ich muss ein paar Dinge hinzufügen, und ich bin mir nicht sicher, wie ich das machen soll. Und noch wichtiger, wie man es sauber und gut macht.
Ich gebe die Dateien mit einem Kontrollkästchen aus, und ich möchte eine Eigenschaft 'wählen' an sie gebunden. Ich konnte es tun, indem ich das Feld im Backend hinzufügte, aber will das nicht, weil es wirklich nicht dort sein sollte. Sie müssen außerdem angeben, wie viele Gruppen derzeit ausgewählt sind, aus wie vielen Gruppen und insgesamt.
Also, im Grunde möchte ich etwas wie folgt aus:
{
"formSubmit": ?,
"totalNumberOfFiles": ?,
"totalNumberOfSelectedFiles": ?,
"groups":
[
{
"group": "Alice",
"numberOfFiles": ?,
"selectedFiles": ?,
"files": [
{
"filename": "red.mp3",
"length": 5,
"selected": boolean
},
...
]
},
...
]
}
- Obwohl zum Beispiel die
numberOfFiles
ist wahrscheinlich nicht einmal nötig? Kann man das vonfiles.length
oder etwas bekommen? - Und sollte
selectedFiles
eine Funktion/beobachtbar sein, die die Anzahl der ausgewählten Dateien zählt (wie würde das aussehen?) Oder sollte es eher eine Liste sein, die irgendwie hinzugefügt/entfernt wurde (und wie würde man das tun?) - Und wie könnte ich, in der Submit-Funktion, eine Liste der aktuell ausgewählten Dateien bekommen, damit ich sie wieder auf den Server stellen kann?
- Und wie kann ich das grundlegende Array, das ich vom Server mit diesen Dingen bekomme, auf eine nicht allzu chaotische Art und Weise "verbessern/anreichern"?
Grundsätzlich weiß ich (herausfinden), wie die Bindung zu tun, wenn nur das Modell funktioniert, aber nicht verstehen, wie es in einer guten Art und Weise zu bauen, wenn das Mapping-Plugin (und ich wirklich möchte es nicht manuell machen).
Hoffnung, jemand kann mir helfen, denn ich kann nur diese
, dass es viel gemacht * * klarer denken, dass ich tatsächlich in der Lage sein werde weiter auf diesem Weg Knockout auf meinem eigenen jetzt zu bekommen. Ich danke dir sehr! – Svish