2014-12-08 2 views
2

프로젝트에서 Polymer을 사용 중입니다. 특정 요소의 경우 입력 배열입니다. 이 배열에는 예를 들어 bool favorite의 JSON 객체가 들어 있습니다.배열 내부의 특정 속성을 갖는 폴리머 계산 요소

개체를 선호하지 않으면 특정 메시지를 표시하고 싶습니다. <template> 안에있는 배열을 통해 루프하는 법을 알고 있고 filters을 사용하는 방법을 알고 있습니다. 그러나 이것을 효율적으로 수행하는 방법을 알지 못합니다.

현재 루프를 통해 즐겨 찾기 요소의 수를 저장하는 추가 요소가 내 요소에 있지만 매우 비효율적 인 것처럼 보입니다.

dataChanged: function(){ 
    this.nrOfFavorites = 0; 
    for(test in this.data){ 
     if(test.favorite){ 
      this.nrOfFavorites++; 
     } 
    } 
} 

또한, 나는 이렇게 내가 항목을 즐겨 찾기 (드) 후 마음에 드는의 수를 이야기 할 수 없다 this.fire('dataChanged')를 호출하는 다른 방법으로 함수를 호출하지 않는 몇 가지 문제가이있어 사용. 이를위한 권고 된 방법은 무엇입니까?

답변

1

관찰 한대로 (!) 배열 내의 개체 속성을 변경하면 발생하는 *Changed 처리기를 설정할 수 없습니다. 기존 dataChanged 처리기는 기존 객체의 속성이 변경되는 경우가 아니라 data 배열에서 객체가 추가되거나 제거되는 경우에만 발생합니다.

배열의 항목 속성에 대한 변경 사항을 관찰 할 수있는 Polymer 요소 인 <observe-array-items>을 추가했습니다. 직접 사용하거나 논리를 복사 할 수 있습니다.

dataChanged 처리기를 제대로 실행 시키면 즐겨 찾기의 수를 추적하여 카운터를 유지하거나 (해당 앱을 추적하는 것이 유용 할 경우) Array.prototype.some()과 같은 것을 사용하여 favorite이 설정된 개체.

뭔가 같은 :

dataChanged: function() { 
    this.atLeastOneFavorite = this.data.some(function(item) { 
    return item.favorite; 
    }); 
} 
관련 문제