私は、計算された値に対する書き込み関数が、少なくともそれ自体でミューテーションイベントを自動的に発生させない理由を特定しようとしてきました。
私が話していることの例:
<span data-bind="text: fullName"></span>
<input data-bind="value: fullName"/>
次のJavaScriptを使用します。
<script type="text/javascript">
function MyViewModel() {
this.firstName = 'first';
this.lastName = 'last';
this.fullName = ko.computed({
read: function () {
return this.firstName + " " + this.lastName;
},
write: function (value) {
var lastSpacePos = value.lastIndexOf(" ");
if (lastSpacePos > 0) { // Ignore values with no space character
this.firstName = value.substring(0, lastSpacePos); // Update "firstName"
this.lastName = value.substring(lastSpacePos + 1); // Update "lastName"
}
},
owner: this
});
}
ko.applyBindings(new MyViewModel());
firstNameとlastNameは監視可能ではないため、これが発生することは理解していますが、その理由はわかりません。基になるデータが他の場所で個別に使用されていたとしても、少なくともfullNameを使用するすべてのフィールドが更新されることは論理的に思われます。
だから私の質問は具体的には:
- なぜこうなった?
- firstNameまたはlastNameを監視したくない場合、どうすれば回避できますか?