KnockoutJSを既存のアプリケーションに徐々に振りかけようとしています。これに対する私の最初の刺し傷は、いくつかの小さな既存のフォームを取得し、それらの値をぼかし時にサーバーにプッシュすることと、バインディングを介していくつかの要素を更新することです。
私が直面している問題は、フォームが最初に表示されたときに、ノックアウトを介して入力されていないことです。すでにフォームにあるデータを使用してページをレンダリングしています。だから私はこのようにノックアウトを設定します:
function DomainViewModel() {
this.name = "";
this.description = "";
}
ko.applyBindings(new DomainViewModel());
そして、私はそのような私の形を持っています:
<input data-bind="value: name" value="${domainInstance.name.encodeAsHTML()}"/>
<textarea data-bind="value: description" >${domainInstance.description.encodeAsHTML()}</textarea>
つまり、フォームが表示され、ノックアウトによってViewModelの値がフォームに適用され、サーバーによってそこに配置された値が消去されます。私はこれがなぜ起こるのか、そしてこれはバグではないことを理解しています。ただし、ここに別のオプションがあるかどうか疑問に思います。
私は次のようなことができることを知っています:
function DomainViewModel() {
this.name = "${domainInstance.name}";
this.description = "${domainInstance.name}";
}
ただし、外部スクリプトファイルではなく、JavaScriptの一部をGSPに直接配置する必要があります(Grailsを使用しています)。