Я пытаюсь использовать пользовательские компоненты от нокаутом 3.2 и обновлять наблюдаемые изнутри компонента. Вот пример моего пользовательского компонента:Обновление, наблюдаемое из пользовательских компонентов в нокауте 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>
Проблема заключается в том, что когда я click on Up/Down function in my full JS fiddle. Я получаю
Uncaught Error: Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.
Конечно, я могу использовать var a = new Vm();
и обновлять его изнутри компонента с a.yourVote(num);
, но это разрушает саму идею компонентов.
Как я могу сделать это правильно?