私は単純なモデルを持っており、その上に観察可能 (「model.thing」) があります。次に、これに追加のオブザーバブル (「someProp」) を設定し、それをコンポーネントのパラメーターに渡します。
model.thing = ko.observable({});
model.thing.someProp = ko.observable("Yolo");
この時点で、オブザーバブルは計算済みになりましたが、その理由はわかりません。
モデルを変更しmodel.thing
て、オブザーバブルとして持つのではなく、単純なオブジェクトとして持ってからそれを渡すと、計算されたオブジェクトに変更せずに通過します...
誰かがこの動作について説明していますか?
これが実際の例です(計算されたことを示すパラメーターに警告します)。
var viewModel = function() {
var model = {};
model.thing = ko.observable({}); //when thing is observable
//model.thing = {};
model.thing.someProp = ko.observable("Yolo");
return model;
};
ko.components.register('custom-element', {
viewModel: function(params) {
this.value = params.value;
alert(this.value); //then this is dependent, why?!
},
template:
'<div data-bind="text: value"></div>'
});
ko.applyBindings(viewModel);
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.4.1/knockout.mapping.js"></script>
<title>Knockout component</title>
</head>
<body>
<custom-element params="value: thing().someProp"></custom-element>
<!--
<custom-element params="value: thing.someProp"></custom-element> -->
</body>
</html>