1

我试图弄清楚如何执行增加 Horizo​​n.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++
  })
}

如何更新集合中的值,是否必须在模板中呈现集合才能访问集合中的值?

4

1 回答 1

1

首先,您可以通过使用新的箭头函数语法来避免var self = this头痛。即使在函数的函数内,仍然会使用最外层:thisthis

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
  });
}

后修复和前修复可能会变得很棘手,我不确定它是否会产生您期望的输出,因为它会返回值this.foo然后递增

如何更新集合中的值,是否必须在模板中呈现集合才能访问集合中的值?

如果我正确理解了这个问题,那么您使用.update正确,所以您已经知道如何了!但是根据我在 Vue 中的经验,您不必渲染集合就可以访问该值吗?this.foo每次id: 1更改文档时都会重新分配。但是,如果id您最初没有提供.store一个对象,我们将为文档提供一个。所以你的初始.store代码应该是这样的: try { me.insert({ id: 1, datetime: new Date(), value: this.foo // 本地数据变量最初设置为 0。 }).subscribe( result = > 控制台日志(结果),错误 => 控制台日志(错误));} catch(e) { console.log("已经存在!", e); }

此外,您只想订阅对该id: 1文档的更改:

me.find(1).watch().subscribe((data) => { data.map((data) => { this.foo = data.value; }); });

这是否回答你的问题?

编辑:忘了,改变.watch

EDIT2:更改.store(每次都会覆盖数据).insert如果文档不存在则将插入其中,如果存在则错误。我们想要这个功能,因为我们只想在它不存在时插入,如果存在则什么也不做,而不是覆盖该value字段。

于 2016-08-22T17:07:09.867 回答