我有一个简单的模型,上面有一个可观察的(“model.thing”)。然后我在这个(“someProp”)上设置了一个额外的可观察对象并将它传递给组件的参数。
model.thing = ko.observable({});
model.thing.someProp = ko.observable("Yolo");
在这一点上,observable 已经成为一个计算值,我不知道为什么。
如果我更改模型,而不是将其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>