オブジェクトをフォームにデータ リンクしているときに奇妙な動作が発生し、データ バインドとは正確には何なのかという疑問が生じました。
基本的に、新しい会社を作成して更新するフォームがあります。実際の作成/更新は ajax を介して行われるため、両方の目的で同じフォームを使用しています。会社を設立する必要がある場合、すべてが期待どおりに機能します。ただし、会社を更新する必要がある場合、期待どおりに機能しません。次のコードを見てください。
これが私のフォームHTMLのサンプルです:
<div id="result"></div>
<script type="text/x-jsrender" id="CompanyFormTemplate">
<form>
<input type="text" data-link="Company.Name" />
</form>
</script>
ここに私のJavascriptコードがあります:
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);
}
「Company ABC」を示すフォーム入力の代わりに、それは空です。ただし、何かを入力すると、Company.Name の値が変わります。しかし、データへの入力を Company オブジェクトの Name プロパティにバインドする一方で、(親) Company オブジェクトに加えられた変更を認識し、それに応じて Name プロパティへのデータ バインディングを更新することも必要です。
だから私の質問は、ルートオブジェクトとプロパティの両方でデータバインドを達成できるように、このコードの書き方をどのように変更すればよいですか?