Javascript 递增地平线集合中的值
我正试图找出如何在horizon.io集合中执行递增值的基本任务。例如,我有一个Javascript 递增地平线集合中的值,javascript,vue.js,rethinkdb,horizon,Javascript,Vue.js,Rethinkdb,Horizon,我正试图找出如何在horizon.io集合中执行递增值的基本任务。例如,我有一个标记,它可以表示一个UpVoces按钮,我希望UpVoces计数是持久的 <h1 @click="inc">{{foo}}</h1> <!-- foo is local variable --> <ul> <li v-for="message in me"> {{message.value}} <!-- message.
标记,它可以表示一个UpVoces按钮,我希望UpVoces计数是持久的
<h1 @click="inc">{{foo}}</h1> <!-- foo is local variable -->
<ul>
<li v-for="message in me">
{{message.value}} <!-- message.value is upvote value from collection -->
</li>
</ul>
然后,每次单击
标记时,我都会尝试更新该值:
inc(){
me.update({
id: 1,
value: this.foo++
})
}
如何更新集合中的值,以及是否必须在模板中呈现集合才能访问集合中的值?首先,您可以通过使用新的<代码>此即使在函数的函数内,函数仍将使用最外层的
此
:
created(){
我的商店({
日期时间:新日期(),
值:this.foo//本地数据变量最初设置为0。
}).订阅(
结果=>console.log(结果),
error=>console.log(错误)
);
me.watch().subscribe((数据)=>{
data.map((数据)=>{
this.foo=data.value;
})
})
},
您的增量.update
函数看起来是正确的,但我会这样做:
inc(){
this.foo++;
me.update({
id: 1,
value: this.foo
});
}
后修复和预修复可能会变得棘手,我不确定它是否会产生您期望的输出,因为它会
如何更新集合中的值,以及是否必须在模板中呈现集合才能访问集合中的值
如果我正确理解了这个问题,那么您就正确使用了.update
,这样您就知道了!但根据我在Vue中的经验,您不必渲染集合就可以访问该值this.foo
将在id为1的文档每次更改时重新分配。但是,如果您在最初存储对象时未提供id
,我们将为文档提供一个。因此,您的初始.store
代码可能如下所示:
试一试{
插入({
id:1,
日期时间:新日期(),
值:this.foo//本地数据变量最初设置为0。
}).订阅(
结果=>console.log(结果),
error=>console.log(错误)
);
}捕获(e){
log(“已存在!”,e);
}
另外,您只想订阅对该文档的更改id:1
document:
me.find(1.watch().subscribe((数据)=>{
data.map((数据)=>{
this.foo=data.value;
});
});
这回答了你的问题吗
编辑:忘记,更改。观看
EDIT2:将.store
(每次都会覆盖数据)更改为。insert
,如果文档不存在,它将插入,如果文档不存在,则会出错。我们想要这个功能,因为我们只想在它不存在时插入,如果存在则什么也不做,而不是覆盖值
字段 将单击处理程序附加到从集合中获取的值时,我会出现奇怪的行为。增量有效,但更新后的值不会持续。如果我在一个浏览器中单击它,该值将增加,但如果我在另一个浏览器中打开它,该值将返回,但不一定返回到零。事实上,该值以不可预测的方式反弹。不确定这里发生了什么。我已经解决了奇数递增问题,但该值不存在。如果我刷新浏览器,值会回到零。嘿@MahmudAdam我犯了一个愚蠢的错误,以为你只会运行一次.store
,但是如果你查看我上面的更新,你会发现我们想要使用.insert
,并捕获它是否已经存在并继续运行。基本上,每次加载页面时,都会覆盖已经存在的文档,这就是为什么该值总是返回到零。
inc(){
this.foo++;
me.update({
id: 1,
value: this.foo
});
}