確かに可能です。これは、ここのドキュメントの「例1:ユーザー入力の分解」という見出しの下に示されています。
function MyViewModel() {
this.firstName = ko.observable('Planet');
this.lastName = ko.observable('Earth');
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」コンポーネントに分割し、それらの値を基になるオブザーバブルに書き戻すことによって、着信値を処理します。
HTML:
<p>First name: <span data-bind="text: firstName"></span></p>
<p>Last name: <span data-bind="text: lastName"></span></p>
<h2>Hello, <input data-bind="value: fullName"/>!</h2>
編集:
クイックブレークダウン
- 読み取り:計算されたオブザーバブルに表示されるものを返すために実装するコード
- write:基になるオブザーバブルに書き戻されるもの。