渡したい複雑なオブジェクトがko.mapping.fromJS
あり、問題は、1 つのフィールドだけを監視可能にしたいということですが、他のプロパティは、試した方法に基づいて null または存在しないと見なされます。
私の問題を説明するために、ここで jsFiddle を作成しました。内部オブジェクトを観察可能にする必要がないため、内部オブジェクトを単純にコピーしたいと考えています。これらの数を考慮すると、余分なオーバーヘッドは必要ありません。
これの目標は、qty
編集可能にすることですがinner.name
、テキスト ボックスでは同じままです。これは、一方がオブザーバブルであり、他方がそうでないことを意味します。
マッピングを含まない別の方法がある場合は、ぜひ聞いてください。私のビューモデルにはかなりの数の関数などがあり、データは AJAX 呼び出しから入ってきます。
function viewModel() {
var self = this;
self.slots = ko.observableArray([]);
self.load = function() {
ko.mapping.fromJS(
[
{ 'qty': 1, 'inner': { 'name': 'thing'} },
{ 'qty': 2, 'inner': { 'name': 'stuff'} }
],
{ 'include': ['qty'], 'ignore': ['inner.name'] },
self.slots);
}
};
ko.applyBindings(new viewModel());
<button data-bind="click: load">Go</button>
<ul data-bind="foreach: slots">
<li>
<span data-bind="text: qty"></span> <span data-bind="text: inner.name"></span><input data-bind="value: qty" /><input data-bind="value: inner.name" />
</li>
</ul>