Ich habe seltsames Verhalten, wenn Daten ein Objekt mit einem Formular verknüpfen, das mich dazu brachte, erneut zu hinterfragen, was genau Daten gebunden sind?JsViews, wie Datenbindung sowohl auf dem Root-Objekt als auch auf den verschachtelten Eigenschaften vorgenommen wird?
Grundsätzlich habe ich ein Formular, das neue Firmen erstellt sowie sie aktualisiert. Die eigentliche Erstellung/Aktualisierung erfolgt über Ajax, weshalb ich für beide Zwecke das gleiche Formular verwende. Wenn ich ein Unternehmen gründen muss, funktioniert alles wie erwartet. Wenn ich jedoch ein Unternehmen aktualisieren muss, funktionieren die Dinge nicht so, wie ich es von ihnen erwarte. Bitte sehen Sie sich den folgenden Code an.
Hier ist mein Beispielformular HTML ist:
<div id="result"></div>
<script type="text/x-jsrender" id="CompanyFormTemplate">
<form>
<input type="text" data-link="Company.Name" />
</form>
</script>
Hier ist mein Javascript-Code:
var app = new CompanyFormContext();
function CompanyFormContext() {
this.Company = {
Name: ''
};
this.setCompany = function (company) {
if (company) {
$.observable(this).setProperty('Company', company);
}
};
};
$(function() {
initPage();
...
if (...) {
// we need to update company information
app.setCompany({ Name: 'Company ABC' });
}
});
function initPage() {
var template = $.templates('#CompanyFormTemplate');
template.link("#result", app);
}
Anstelle der Formulareingabe zeigt 'Firma ABC', ist es leer. Wenn ich jedoch etwas darin eingebe, ändert sich der Company.Name Wert! Aber während ich möchte, dass die Dateneingabe an die Name-Eigenschaft meines Company-Objekts gebunden wird, möchte ich auch wissen, dass Änderungen am (übergeordneten) Company-Objekt vorgenommen werden und die Datenbindung an die Name-Eigenschaft entsprechend aktualisiert wird.
Also meine Frage ist, wie sollte ich ändern, wie ich diesen Code schreibe, so dass ich eine Datenbindung sowohl auf das Stammobjekt als auch die Eigenschaft erreichen kann?
Vielen Dank für die Links zu den entsprechenden Abschnitten zu teilen! Ironischerweise war ich in der Vergangenheit beide Abschnitte durchgegangen, aber als ich diesen Code schrieb, fiel mir einfach nicht ein, dass ich das tun musste. Eine kleine Frage: Gibt es ein anderes Konstrukt, das ich verwenden sollte, um anzuzeigen, dass ein Objekt mit der Schablone X anstatt für ein Objekt gerendert wird? –