매우 기괴한 문제가 있습니다. Backbone 컬렉션이 있고 컬렉션에서 특정 특성과 일치하는 모델을 찾기 위해 where 메서드를 사용하고 있습니다. 내 문제는 결과의 모순이다.어레이의 길이가 때때로 0으로 표시됩니다.
사용자가 가입 한 목표를 추적하는 joinedGoalList가 있습니다. 이 컬렉션에 ID가 1과 3 인 두 가지 목표가 포함되어 있다고 가정 해 보겠습니다. 사용자가/goals/3에 액세스하면 사용자가 목표에 들어 갔음을 나타내는 메시지가 표시됩니다.
내가 액세스/목표/3, 메시지가 표시되는 시간의 절반, 나머지 시간이 메시지에 표시되지 않습니다.
이상한 점은이 문제는 로컬 서버가 아닌 내 원격 서버에서만 발생한다는 것입니다.
내 코드에서 joinedGoalList에 ID 3을 쿼리하고 일치하는 경우 matches 배열이 0보다 커야한다는 것을 알고 사용자가 목표에 합류했다는 메시지를 표시합니다. 여기
코드입니다 (joinedGoalList는 백본 모음입니다 :child
_byCid: Object
_byId: Object
_callbacks: Object
length: 2
models: Array[2]
__proto__: ctor
당신이 볼 수 있듯이 : 여기
console.log(joinedGoalList);
var matches = joinedGoalList.where({id: this.model.get("id")});
console.log(matches);
console.log(matches.length);
if (matches.length > 0) {
console.log("the matches length is > 0");
this.renderLeaveGoal();
} else {
console.log("the matches length is 0");
this.renderJoinGoal();
}
는
console.log(joinedGoalList)
의 결과이며, 여기 결과는 (그들은 일치)입니다 길이가 2입니다. 개체 중 하나의 ID가 1이고 다른 개체의 ID가 3입니다. 이것은 페이지로드 전체에서 일관됩니다.
불일치 occu rs는 ID가 3 인 객체에 대해 배열에서 일치 작업을 수행 할 때 발생합니다. 일부 페이지가로드되면 다른 페이지를로드해도 일치하는 항목을 찾지 못합니다. console.log(matches.length)
의
결과는 아직 내 로컬 호스트에, 결과는 1
"단지 내 원격 서버에서 발생"나에게 경쟁 조건 –
당신은이 서버에서 데이터로 채워지기 전에 당신이 컬렉션을 확인하지 않을 확실 냄새? 근본적인'fetch'는 결국 비동기 적입니다. –
컬렉션에있는 모델의 ID를 콘솔에 로깅하여 사용자가 가지고있는 것을 확인할 수 있도록하는 것이 좋습니다. 그 시점에서 당신이 저장하고있는 모델이 정확하게 저장되어 있는가, 그렇지 않으면'id'가 설정되어 있습니까? 사이드 노트, 여기서'where()'를 사용하는 이유 - 왜'joinedGoalList.get (this.model.get ('id'))'가 아닌가? – JMM