Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Knockout.js 为什么在传递到组件中时,此可观察对象会成为计算/依赖对象?_Knockout.js_Knockout 3.2 - Fatal编程技术网

Knockout.js 为什么在传递到组件中时,此可观察对象会成为计算/依赖对象?

Knockout.js 为什么在传递到组件中时,此可观察对象会成为计算/依赖对象?,knockout.js,knockout-3.2,Knockout.js,Knockout 3.2,我有一个简单的模型,上面有一个可观察的(“model.thing”)。然后,我在此(“someProp”)上设置了一个额外的observable,并将其传递到组件的参数中 model.thing = ko.observable({}); model.thing.someProp = ko.observable("Yolo"); 在这一点上,可观测的已经变成了计算的,我不知道为什么 如果我改变模型,而不是把model.thing作为一个可观察的对象,我把它作为一个简单的对象,然后把它传递进来,它

我有一个简单的模型,上面有一个可观察的(“model.thing”)。然后,我在此(“someProp”)上设置了一个额外的observable,并将其传递到组件的参数中

model.thing = ko.observable({});
model.thing.someProp = ko.observable("Yolo");
在这一点上,可观测的已经变成了计算的,我不知道为什么

如果我改变模型,而不是把
model.thing
作为一个可观察的对象,我把它作为一个简单的对象,然后把它传递进来,它就通过了,而没有变成一个计算的

有人对这种行为有什么解释吗

下面是一个工作示例(它向param发出警报,表明它已成为计算对象)

var viewModel=function(){
var模型={};
model.thing=ko.observable({});//当事物是可观察的
//model.thing={};
model.thing.someProp=ko.可观察(“Yolo”);
收益模型;
};
ko.components.register('自定义元素'{
viewModel:函数(参数){
this.value=params.value;
警报(this.value);//那么这是依赖的,为什么?!
}, 
模板:
''
});
应用绑定(视图模型)

敲除元件

多亏了涅梅斯夫,他给我指出了原因

使用自定义元素语法时提供的params对象将 还包括$raw属性(除非参数恰好提供了 属性),该属性允许访问 返回原始值(而不是未包装的值)

例如:

在这种情况下,由于selectedItem被访问,所以参数作为 计算的。访问计算出的值时,将显示展开的值 返回以避免必须双重展开参数才能获取其值。 但是,您可能希望访问在这种情况下可观察到的值, 而不是它的展开值。在组件中,这可能是 通过访问
参数$raw.value()
实现。默认功能 倾向于易于使用(无需打开参数两次) 同时为高级案例提供
$raw


请参阅:如何将参数传递给组件以解释此行为。我明白了,谢谢,因此为了解决此问题(设置值),我需要使用参数$raw.value();非常感谢。
<my-component params="value: selectedItem().value"></my-component>