在 Horizo​​n 集合中增加价值

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 字段。