オブザーバブル配列を内部的に使用する計算オブザーバブルをバインドしようとしています。ロード中に「読み取り」メソッドが呼び出されます。ただし、テーブルの値が変更されてフォーカスが移動した場合、「書き込み」メソッドは呼び出されません。配列ではなく単純な文字列をラップする単純な計算されたオブザーバブルの場合、「書き込み」メソッドが機能することに注意してください。ただし、このシナリオでは機能しません。Knockout api のドキュメントとオンライン フォーラムを調べましたが、これについては何も見つかりませんでした。誰かアドバイスをお願いできますか?以下はHTMLコードです
<thead>
<tr><th>People Upper Case Name</th></tr>
</thead>
<tbody data-bind="foreach: uppercasepeople">
<tr>
<td ><input type="text" data-bind="value: name"/></td>
</tr>
</tbody>
</table>
以下はJavaスクリプトコードです
<script type="text/javascript">
var MyViewModel = function () {
var self = this;
var self = this;
//Original observable array is in lower case
self.lowercasepeople = ko.observableArray([
{ name: "bert" },
{ name: "charles" },
{ name: "denise" }
]);
//coputed array is upper case which is data-bound to the ui
this.uppercasepeople = ko.computed({
read: function () {
alert('read does get called :)...yaaaa!!!');
return self.lowercasepeople().map(function (element) {
var o = { name: element.name.toUpperCase() };
return o;
});
},
write: function (value) {
alert('Write does not get called :(... why?????');
//do something with the value
self.lowercasepeople(value.map(function (element) { return element.toLowerCase(); }));
},
owner: self
});
}
ko.applyBindings(new MyViewModel());
Knockout API ドキュメントに示されている例と同様のコードを配置したので、人々は簡単に関連付けることができます。