2012-05-31 2 views
2

다음 피들을 참조하십시오. http://www.senchafiddle.com/#xXQlp 잘못된 데이터를 보여주는 출력을 보려면 콘솔을 열어야합니다.Sencha touch 2 모델 연결 저장을위한 잘못된 데이터 저장

여기에서는 각각 2 개의 Student 모델을 만들고 있는데, 각 모델에는 0 개 이상의 Award 모델 목록이 있습니다. Dave는 2 개의 멋진 상을 받았습니다 - 놀랍지 않게 :) - Chaz는 2 가지의 멋진 상을 추가했지만. 문제는 로깅이 infact Chaz가 4 개의 상 (2 개의 좋은 것들뿐만 아니라 2 개의 나쁜 것들)으로 끝난다는 것을 보여줍니다.

이 바이올린은 훨씬 더 큰 응용 프로그램의 심각한 끓어 넘기지만, 나는 이것을 가지고있는 거대한 문제의 기원으로 이것을 격리했습니다. 나는 심지어 그것을위한 '수정'을 발견했습니다. 바이올린에서 55와 56 줄을 주석 처리하고 다시 실행하면 (로컬 저장소를 지우십시오!), Chaz는 오직 2 개의 상을 수여해야합니다.

내가 분명하기를 희망하는 이유 때문에 이것은 만족스럽지 않습니다. Chaz가 4 개의 상을 모두 받게하려면 내가 협회에 잘못하고있는 다른 것이 있어야합니다. ... 틀림없이?

건배!

업데이트 : autoLoad를 제거하면 아래의 답변이 허용됩니다. true로 설정하면 문제가 해결됩니다. 나는 자동로드하지만, 그래서 나는 학생 모델의 초기화에 다음 구현하려는 : 이것은 학생이있는 각 hasMany의 협회에 대한 게터를 추가

for (var i=0, l=this.associations.all.length; i<l; i++) { 
    var assoc = this.associations.all[i]; 
    if (assoc._type == "hasmany") { 
     var assocName = assoc._name; 
     var getterName = 'get' + assocName.charAt(0).toUpperCase() + assocName.slice(1); 
     this[getterName] = function(assocName) { 
      var self = this; 
      return function() { 
       var store = self[assocName](); 
       if (!store.isLoaded()) { 
        store.load(); 
       } 
       return store; 
      } 
     }.call(this, assocName) 
    } 
} 

을, 그 협회의 저장소가 반환하기 전에로드되는 것을 보장한다 그것. 즉, 이제 student1.awards()가 아닌 student1.getAwards()로 student1의 상을받을 수 있으며 상금이로드된다는 것을 알았습니다. 이는 모델에 추가 한 다른 hasMany 연관에 대해 자동으로 작동합니다.

독자 분들께 도움이되기를 바랍니다.

답변

2

시상 내역을 자동으로로드하지 않으면이 문제를 해결할 수 있습니다. 학생 >> 수상 내역 hasMany association에서 autoload: true을 삭제하십시오. 상을 자동 로딩하는 것처럼 일을 나누기 왜 나는 완전히 이해하지 않지만,이 포럼 스레드는이 버그 제안 : http://www.sencha.com/forum/showthread.php?195371-autloaded-associations-don-t-properly-filter-data-from-a-JSON-proxy

귀하의 예를 작업 : http://www.senchafiddle.com/#xXQlp#S3Af0

+0

감사는 문제를 해결 것을 찾기 위해, 자동로드를 가진 것은 아니지만 나는 성가심이므로, 나는 내 질문에 덧붙여서 그 일을 해결했다. 건배. –