我正在尝试使用敲除3.2中的自定义组件,并从组件内部更新可观察到的组件。这是我的自定义组件的示例:
ko.components.register('voting', {
viewModel: function(params) {
var self = this;
this.votes = params.votes;
this.yourVote = params.yourVote;
this.callback = function(num){
self.yourVote(parseInt(num)); // here I am updating
self.votes( self.votes() + parseInt(num) );
};
},
template: { element: 'voting-tpl' }
});
它的模板如下所示:
<voting params="votes: votes(), yourVote: yourVote()"></voting>
<template id="voting-tpl">
<div data-bind="click:function(){callback(1)}">Up</div>
<div data-bind="text: votes"></div>
<div data-bind="click:function(){callback(-1)}">Down</div>
</template>
问题是,当我在完整的JS小提琴中单击“向上/向下”功能时。我懂了
未捕获的错误:除非您指定“写入”选项,否则无法将值写入ko.computed。如果要读取当前值,请不要传递任何参数。
当然,我可以var a = new Vm();
在组件内部使用和更新它,a.yourVote(num);
但这破坏了组件的整体思想。
我该怎么做呢?
您应该将可观察对象作为参数传递给自定义组件,而不是创建依赖项:
<voting params="votes: votes, yourVote: yourVote"></voting>
您可以在此处了解更多信息剔除3.2组件(如何将参数传递给组件)
提供了参数来初始化组件,就像在组件绑定中一样,但是有一些区别:
- 如果参数本身创建依赖项(访问可观察值或计算值),则组件将接收返回该值的计算值。这有助于确保不需要在参数更改时重新构建整个组件。组件本身可以控制其访问和处理任何依赖项的方式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句