从敲除3.2中的自定义组件可观察到的更新

萨尔瓦多·达利(Salvador Dali)

我正在尝试使用敲除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组件(如何将参数传递给组件)

提供了参数来初始化组件,就像在组件绑定中一样,但是有一些区别:

  • 如果参数本身创建依赖项(访问可观察值或计算值),则组件将接收返回该值的计算值。这有助于确保不需要在参数更改时重新构建整个组件。组件本身可以控制其访问和处理任何依赖项的方式。

修复了JSFiddle DEMO

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何更新自定义绑定中的可观察对象?

绑定为可观察到的敲除时如何更新ckeditor数据?

敲除自定义数字绑定

angular4:使用valueChanges的自定义“等于”验证可观察到

在敲除自定义绑定中,您如何知道哪个值触发了更新?

嵌入应用程序时,从D3中删除可观察到的单元格

RxJS groupBy通过ngrx效果可观察到的自定义数组

自定义模板剑道网格-调用相同的可观察到的

无法绑定可观察数组-敲除

敲除和可观察到的阵列不匹配

敲除自定义html绑定

对象文字中的自定义敲除绑定

引用可观察到的自定义html id的敲除

当敲除中的其他可观察值发生变化时,更新可观察值

如何在Javascript中返回对函数的引用(可观察到的敲除)

我想将ID添加到div中,与敲除中可观察到的数组的第一个值相同

显示敲除可观察数组的内容

带有敲除的jQWidgets数字输入不会更新为可观察到的

其他功能中可观察到的敲除/ JS引用

敲除自定义绑定在更新前获取值

如何使用包含可观察到的字符串的表达式使基因敲除可见绑定起作用?

将Asp.Net MVC json结果绑定到敲除.js可观察到的数组

自定义敲除组件

具有可观察对象的敲除组件不会更新数据

我的敲除自定义绑定不是2向绑定

(JsFiddle)可观察到的敲除在绑定到console.log的屏幕上显示出不同的值

序列化rxjs可观察到的自定义业务对象

敲除的可观察数组排序问题

敲除计算的可观察写入不更新