直感的な方法は1つですが、私はKOマッピングプラグインを使用することができましたが、必要なものだけを使ってnaked viewModelを作成し、サーバーの結果が来るたびにfromJS
となりました。不足しているプロパティーが追加され、既存のプロパティーが更新されると仮定しました。KnockoutJSマッピング - サーバーから必要な情報を入力してください
私はちょうど欠落しているプロパティが空白を示すと、document.ready上の私のDOMに、この裸のViewModelを結合することができると思いました。次に、ajaxコールバックが起動し、マッピングライブラリが新しいプロパティを追加すると、DOMが更新されます。
私が見た結果は、これが不可能であることを示していると思います。私は何かが欠けていないことを確認したかったのです。
コードは以下ですが、私が見つけた三つの主要な問題であった:DOMはViewMoelから欠けているプロパティにバインドされている場合
、それは誤りです。これは驚くべきことではありません。特に以下の説明は、@ madcapnmckayの説明を参考にしてください。
計算に観察参照ViewModelに欠席のビューモデルのプロパティなら、それは誤りです。計算されたObservableはすべて即座に実行されるため、KOはcomputedObservableが依存している観測可能なプロパティを追跡できるため、このケースを想定しています。
ほとんど壊滅的な、それはそのViewModelには、もともと
fromJS
で作成した場合、既存のViewModelにのみfromJS
で更新することができますように見えます。fromJS
のように見えるコードを調べると、2番目のパラメータが渡されていれば、mappingsプロパティを調べます。
私はこれを回避するための助けは必要ありません。私はすでにこのすべてに対処する簡単な方法を思いついた。私は、上記の3つの箇条書きのいずれかに欠けている簡単なことがないことを確認して、より簡単にすることを望みます。
VM:
var vm = new (function() {
this.prettyName = ko.computed(function() {
return this.title() + " " + this.name();
}, this);
})();
"AJAX" 結果:
var serverObj = {
title: 'Mr.',
name: 'Adam Rackis',
degreeValue: 2,
degreeTypes: [{ val: 1, txt: 'Bachelors' }, { val: 2, txt: 'Masters' }, { val: 3, txt: 'PhD'}]
};
HTML KOで作業するとき、私はこれらの同じ問題のすべてを直撃している
<div id="educationPane">
Name: <input type="text" data-bind="value: prettyName" />
Degree: <select data-bind="{foreach: degreeTypes, value: degreeValue}">
<option data-bind="{text: text, value: val}"></option>
</select>
</div>
返信いただきありがとうございます。ええ、ポイント1と2は驚くことではありません(私の質問でポイント2と同じ理由を述べました)が、ポイント3は最も厄介なようです。なぜ彼らがそうしたのだろうと想像することはできません。 –
@AdamRackis - map/unmap/update機能を実装するためにBase ViewModelクラスを作成することを検討していますが、今週末にそれを見ています。 – madcapnmckay