KnockoutJS を使用して、オブジェクトのリストを ajax 呼び出しにマップしたいと考えています。また、マッピングオブジェクトを渡したいです。
ボタンクリック時のバインディングは完璧に機能し、マッピングオブジェクトをスキップすると、期待どおりにすべてのプロパティが作成されます。
ここで、いくつかのプロパティのみを監視可能として作成したいので、マッピング オブジェクトを渡そうとします。しかし、そうすると、Knockout は正しいバインディングを作成しますが、観察可能なものはまったくないようです。これは、有効なマッピング オブジェクトを渡した場合にのみ発生します (ノックアウト ドキュメント)。無効なオブジェクトを渡すと、すべてのプロパティが監視可能である正しいバインディングが作成されます。
何が足りないのか教えてもらえますか?
(マッピング オブジェクトは「観察」または「コピー」では機能しません)
これは私のHTMLです:
<button type="button" data-bind="click: load">Load</button>
<form>
<table>
<thead>
<tr>
<th>Name</th>
<th></th>
<th>Number</th>
<th></th>
</tr>
</thead>
<tbody data-bind="foreach: infos">
<tr>
<td>
<input data-bind="value: Name" />
</td>
<td data-bind="text: Name"></td>
<td>
<input data-bind="value: Number" />
</td>
<td data-bind="text: Number"></td>
</tr>
</tbody>
</table>
</form>
そして、これは私のJavaScriptです:
<script type="text/javascript">
function ViewModel() {
var self = this;
self.mapping = {
observe: ["Number"]
};
self.infos = ko.mapping.fromJS([]);
//self.infos = ko.observableArray();
self.load = function () {
// Ajax-Call
var data = [{ "Name": "MyName", "Number": "12345" }, { "Name": "MyName", "Number": "12345" }, { "Name": "MyName", "Number": "12345" }];
self.SuccessfullRetrievedModelsFromAjax(data);
};
self.SuccessfullRetrievedModelsFromAjax = function (data) {
ko.mapping.fromJS(data, self.mapping, self.infos);
};
};
var model = new ViewModel();
ko.applyBindings(model);
</script>
前もって感謝します!