2016-08-21 13 views
1

horizon.io 컬렉션의 값을 증가시키는 기본 작업을 수행하는 방법을 파악하려고합니다. 예를 들어 upvotes 버튼을 나타낼 수있는 <h1> 태그가 있고 upvotes 수를 영구적으로 유지하려고합니다. 내가 값에게 <h1> 태그를 클릭 할 때마다 업데이트하려고 그런Horizon 컬렉션의 값이 증가합니다.

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

:

inc(){ 
    me.update({ 
    id: 1, 
    value: this.foo++ 
    }) 
} 

을 어떻게에서 값을 업데이트 않는 뷰 인스턴스의 다음

<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> 

컬렉션에있는 값에 액세스하려면 내 템플릿에서 컬렉션을 렌더링해야합니까?

답변

1

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

후 수정 및 사전 수정 얻을 수 있습니다 까다 롭고, 나는 그것이 return the value of this.foo and then increment이 될 것이므로 기대했던 결과물을 얻는 지 확신 할 수 없다.

컬렉션의 값을 업데이트하려면 어떻게해야합니까? 컬렉션의 값에 액세스하려면 컬렉션의 값을 템플릿에 렌더링해야합니까?

질문을 올바르게 이해하는 경우 .update을 올바르게 사용하고 있으므로 이미 알고 계신 것입니다. 그러나 Vue에서의 경험으로 볼 때 콜렉션을 렌더링하여 값에 액세스 할 필요가 없습니까? id: 1이 변경 될 때마다 this.foo이 재 할당됩니다. 그러나 처음에 .store 개체를 제공 할 때 id을 제공하지 않으면 문서 용으로 제공합니다. 그래서 초기 .store 코드는 아마 다음과 같아야합니다 시도 { me.insert을 ({ ID : 1, 날짜 : 새로운 날짜(), 값 : 처음에 0으로 설정 this.foo // 로컬 데이터 변수 . }). subscribe ( 결과 => console.log (결과), 오류 => console.log (오류) ); } catch (e) { console.log ("이미 존재합니다!", e); }

당신은 단지 하나 개 id: 1 문서의 변경에 가입하고자 할 또한

:.

me.find (1) .watch는() ((데이터) => { data.map ((데이터를 가입) => { this.foo = data.value; }); });

질문에 대한 답변이 있습니까?

편집 : 찾기는 .watch

EDIT2을 변경합니다 : 그것은 않는 경우 문서가 존재하고 오류가없는 경우 삽입합니다 .insert에 (데이터 매번 덮어 쓰기하는) .store 변경. value 필드를 덮어 쓰는 대신 존재하지 않으면 삽입하고 아무것도 수행하지 않으려 고하기 때문에이 기능이 필요합니다.

+0

클릭 핸들러를 컬렉션에서 가져온 값에 연결하면 이상한 동작이 발생합니다. 증분은 작동하지만 업데이트 된 값은 유지되지 않습니다. 하나의 브라우저에서 값을 클릭하면 값이 증가하지만 다른 브라우저에서 열면 값은 다시 내려갑니다.하지만 반드시 0으로 되돌아 가지는 않습니다. 실제로이 값은 예측할 수없는 방식으로 주변에서 튀어 오릅니다. 여기서 무슨 일이 일어나고 있는지 확실하지 않습니다. –

+0

이상한 증가 문제가 해결되었지만 값이 지속되지 않습니다. 브라우저를 새로 고치면 값은 0으로 돌아갑니다. –

+1

안녕하세요. @MahmudAdam 일단'.store'를 한 번만 실행한다고 가정하면 어리석은 실수를 저지 릅니다.하지만 위의 업데이트를 보면'.insert'를 사용하여 이미 존재하는지 확인하고 싶습니다. 계속 실행하십시오. 기본적으로 페이지를로드 할 때마다 이미 존재하는 문서를 덮어 쓰게되므로 값이 항상 0으로 되돌아갑니다. – dalanmiller