2013-12-09 3 views
1

Ember에서 어레이의 변경 사항을 어떻게 볼 수 있습니까? 내가 모델에서 원시 객체 데이터를 사용 타다 남은 구성 요소를 가지고,하지만 난 구성 요소 내에서 배열 속성을 사용하고있는 문제를 설명하는 자체가 좋아 :컨트롤러/구성 요소 내의 배열 변경 사항을 관찰하는 방법

init:function(){ 
      this._super(); 
      var arr = Ember.A([ 
       Ember.Object.create({"shelfNo": 1, "noOfItems": 2}), 
       Ember.Object.create({"shelfNo": 2, "noOfItems": 3}), 
       Ember.Object.create({"shelfNo": 3, "noOfItems": 2})] 
      ); 
      this.set("someArray",arr); 

      //DOES NOT WORK 

      this.get('someArray').addArrayObserver(function() { 
       Ember.ObjectController.create({ 
        arrayWillChange: function (observedObj, start, removeCount, addCount) { 
         console.log("in arrayWillChange"); 
        }, 
        arrayDidChange: function (array, start, removeCount, addCount) { 
         console.log("in arrayDidChange"); 
        } 
       }); 
      }); 

     } 

나는 또한 시도 :

testObserver: function(){ 
      //DOES NOT WORK 
      console.log("here"); 
     }.observes('[email protected]') 

그러나 모두가 didn를 ' 나를 위해 일해라. http://jsbin.com/EkumOjA/1/

감사합니다, 디

답변

6

당신이 [email protected]를 사용하여 배열의 일부 개체에서 속성을 관찰하는 경우 : 여기

는 jsbin이다. 배열 내용이 변경되면 (someArray.pushObject, removeObject 등) 관찰하려면 someArray.[] 또는 someArray.length을 사용하십시오.

또한 init을 사용하는 대신 someFunc: function() {}.on('init')을 사용하십시오. 이것은 개체 초기화시 옵저버를 작동시키는 안전한 방법입니다.

이 업데이트 된 코드입니다 :

App.ShowQuestionComponent = Ember.Component.extend({ 
    someArray : null, 
    initializeSomeArray:function(){     
     var arr = Ember.A([ 
      Ember.Object.create({"shelfNo": 1, "noOfItems": 2}), 
      Ember.Object.create({"shelfNo": 2, "noOfItems": 3}), 
      Ember.Object.create({"shelfNo": 3, "noOfItems": 2})] 
     );    

     this.set("someArray",arr); 
    }.on('init'), 
    testObserver: function(){     
     console.log("here"); 
    }.observes('someArray.[]') 

}); 

그리고 http://jsbin.com/EkumOjA/2/edit

+0

감사 마르 jsbin 업데이트, 내가 놓친 것을 실현 당신. 나는 .observes ('someArray @ each') 대신 .observes ('someArray. @ each')를 써야했는데, 나는 "."을 놓쳤다. 귀하의 jsbin 없이는 내 문제를 알아낼 수 없을 것입니다. 감사. –

+2

당신은 오신 것을 환영합니다. 'someArray. @ each '는 배열의 속성을 관찰하기 때문에'someArray. []'를 사용하면 콘텐츠 변경을 관찰하고 싶다면 각 항목에 리스너를 추가하므로 단지 'someArray. []'. –

관련 문제