問題は、 を使用すると、入力ko.mapping
のすべてのプロパティが になることobservable
です。
つまり、最初のサンプルで次のことができます。
viewModel.selectAll = function() {
viewModel.checkedProducts.removeAll();
ko.utils.arrayForEach(viewModel.Products(), function(product) {
viewModel.checkedProducts.push(product.Id); // Id is a plain value
});
};
マッピングサンプルでは、次のことを行う必要があります。
viewModel.selectAll = function() {
viewModel.checkedProducts.removeAll();
ko.utils.arrayForEach(viewModel.Products(), function(product) {
viewModel.checkedProducts.push(product.Id()); // Id is an observable!
});
};
http://fiddle.jshell.net/ZeCWP/6/
本当にきれいなのはこれです:
viewModel.selectAll = function() {
viewModel.checkedProducts.removeAll();
ko.utils.arrayForEach(viewModel.Products(), function(product) {
viewModel.checkedProducts.push( ko.utils.unwrapObservable(product.Id) );
});
};
これは両方の場合に機能します。ただし、制御された環境ではunwrapObservable()
、値が常に監視可能かどうかがわかっているため、厳密に使用する必要はありません。