在 Horizon 集合中增加价值
Incrementing value in a Horizon collection
我正在尝试弄清楚如何执行增加 horizon.io 集合中的值的基本任务。例如,我有一个 <h1>
标签可以代表一个投票按钮,我希望投票计数是持久的。
<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>
然后在 Vue 实例中:
created() {
me.store({
datetime: new Date(),
value: this.foo // local data variable set to 0 initially.
}).subscribe(
result => console.log(result),
error => console.log(error)
)
var self = this
me.watch().subscribe(function(data){
data.map(function(data){
self.foo = data.value
})
})
},
然后我尝试在每次单击 <h1>
标签时更新值:
inc(){
me.update({
id: 1,
value: this.foo++
})
}
如何更新集合中的值,是否必须在模板中呈现集合才能访问集合中的值?
首先,您可以通过使用新的 arrow function syntax 来避免 var self = this
的头痛。 this
即使在函数的函数内部仍然会使用最外层的 this
:
created() {
me.store({
datetime: new Date(),
value: this.foo // local data variable set to 0 initially.
}).subscribe(
result => console.log(result),
error => console.log(error)
);
me.watch().subscribe((data) => {
data.map((data) => {
this.foo = data.value;
})
})
},
您的递增 .update
函数看起来正确,但我会这样做:
inc(){
this.foo++;
me.update({
id: 1,
value: this.foo
});
}
Post-fix 和前缀可能会变得棘手,我不确定它是否会产生您期望的输出,因为它会 return the value of this.foo
and then increment。
How do I update a value in the collection, and do I have to render the collection in my template in order to have access to the value in the collection?
如果我对问题的理解正确,那么你使用 .update
是正确的,所以你已经知道怎么做了!但是根据我在 Vue 中的经验,您不必渲染集合就可以访问值?每次带有 id: 1
的文档更改时,都会重新分配 this.foo
。但是,如果您在最初 .store
一个对象时没有提供 id
,我们将为文档提供一个。所以你的初始 .store
代码可能应该是这样的:
尝试 {
me.insert({
编号:1,
日期时间:新日期(),
value: this.foo // 本地数据变量最初设置为 0。
})。订阅(
结果 => console.log(结果),
错误 => console.log(错误)
);
} 抓住(e){
console.log("Already exists!", e);
}
此外,您只想订阅对 id: 1
文档的更改:
me.find(1).watch().subscribe((数据) => {
data.map((数据)=>{
this.foo = data.value;
});
});
这是否回答了您的问题?
编辑:忘记了,要更改 .watch
EDIT2:将.store
(每次都会覆盖数据)更改为.insert
,如果文档不存在则插入,如果存在则出错。我们想要这个功能,因为我们只想在它不存在时插入,如果它存在则什么都不做,而不是覆盖 value
字段。
我正在尝试弄清楚如何执行增加 horizon.io 集合中的值的基本任务。例如,我有一个 <h1>
标签可以代表一个投票按钮,我希望投票计数是持久的。
<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>
然后在 Vue 实例中:
created() {
me.store({
datetime: new Date(),
value: this.foo // local data variable set to 0 initially.
}).subscribe(
result => console.log(result),
error => console.log(error)
)
var self = this
me.watch().subscribe(function(data){
data.map(function(data){
self.foo = data.value
})
})
},
然后我尝试在每次单击 <h1>
标签时更新值:
inc(){
me.update({
id: 1,
value: this.foo++
})
}
如何更新集合中的值,是否必须在模板中呈现集合才能访问集合中的值?
首先,您可以通过使用新的 arrow function syntax 来避免 var self = this
的头痛。 this
即使在函数的函数内部仍然会使用最外层的 this
:
created() {
me.store({
datetime: new Date(),
value: this.foo // local data variable set to 0 initially.
}).subscribe(
result => console.log(result),
error => console.log(error)
);
me.watch().subscribe((data) => {
data.map((data) => {
this.foo = data.value;
})
})
},
您的递增 .update
函数看起来正确,但我会这样做:
inc(){
this.foo++;
me.update({
id: 1,
value: this.foo
});
}
Post-fix 和前缀可能会变得棘手,我不确定它是否会产生您期望的输出,因为它会 return the value of this.foo
and then increment。
How do I update a value in the collection, and do I have to render the collection in my template in order to have access to the value in the collection?
如果我对问题的理解正确,那么你使用 .update
是正确的,所以你已经知道怎么做了!但是根据我在 Vue 中的经验,您不必渲染集合就可以访问值?每次带有 id: 1
的文档更改时,都会重新分配 this.foo
。但是,如果您在最初 .store
一个对象时没有提供 id
,我们将为文档提供一个。所以你的初始 .store
代码可能应该是这样的:
尝试 {
me.insert({
编号:1,
日期时间:新日期(),
value: this.foo // 本地数据变量最初设置为 0。
})。订阅(
结果 => console.log(结果),
错误 => console.log(错误)
);
} 抓住(e){
console.log("Already exists!", e);
}
此外,您只想订阅对 id: 1
文档的更改:
me.find(1).watch().subscribe((数据) => { data.map((数据)=>{ this.foo = data.value; }); });
这是否回答了您的问题?
编辑:忘记了,要更改 .watch
EDIT2:将.store
(每次都会覆盖数据)更改为.insert
,如果文档不存在则插入,如果存在则出错。我们想要这个功能,因为我们只想在它不存在时插入,如果它存在则什么都不做,而不是覆盖 value
字段。