다음 피들을 참조하십시오. 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 연관에 대해 자동으로 작동합니다.
독자 분들께 도움이되기를 바랍니다.
감사는 문제를 해결 것을 찾기 위해, 자동로드를 가진 것은 아니지만 나는 성가심이므로, 나는 내 질문에 덧붙여서 그 일을 해결했다. 건배. –