我正在处理一些使用Knockout.js的遗留代码,我必须添加一个新功能,我在某个点上有点迷失。我不能分享实际代码,所以我将使用一些伪代码来描述我的问题
假设我有一些示例View模型
function ViewModel(params)
{
this.questions = params.questions;
this.clear = ko.observable();
}
它从外部源获取一个问题数组,但它不是一个可观察数组。
ViewModel.prototype.add = function()
{
if (this.clear === 'No'){
this.clear('Yes');
} else{
this.clear('No');
}
}
我有一个已注册的组件
ko.components.register('customComponent', {
viewModel: function(params) {
this.clearInComponent = ko.observable(params.clear);
},
template: '<div data-bind="text: clearInComponent "></div>'
});
现在,在我的HTML中,我有一个按钮,单击该按钮会将某个值设置为cthe clear()observable,还有一个组件,我将从View模型向该组件传递参数
<button data-bind="click: add"></button>
<questionnaire params="questions: questions, clear:clear"></questionnaire>
现在,每当父视图模型中clear()的值发生变化时,它也会反映在组件中,这是预期的。我想要实现的是设置对clearInComponent的订阅,这样当父视图模型中可观察到的clear()发生变化时,我就能够捕获事件并做一些额外的事情。我试图在组件视图模型中添加对clearInComponent的订阅,但它不起作用。
this.clearInComponent.subscribe = function(newValue){
// do stuff
}
我的问题是,如果这是可能的,我怎么能做到呢?提前感谢。
1条答案
按热度按时间dxxyhpgq1#
我想这可能就是问题所在:
由于
params.clear
本身就是一个可观测值,所以你基本上是将一个可观测值 Package 在另一个可观测值中,使得订阅this.clearInComponent
变得无用,因为它的值永远不会发生变化。相反,只需直接使用
params.clear
: