我正在尝试使用淘汰赛 3.2中的自定义组件并从组件内更新 observable。这是我的自定义组件的示例:
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 fiddle 中单击 Up/Down 功能时。我明白了
未捕获的错误:除非您指定“写入”选项,否则无法将值写入 ko.computed。如果您想读取当前值,请不要传递任何参数。
当然,我可以var a = new Vm();
从组件内部使用和更新它,a.yourVote(num);
但这打破了组件的整体理念。
我怎样才能正确地做到这一点?