我有一個非常奇怪的問題。我有一個Backbone集合,我使用where方法在集合中查找與某個特定屬性匹配的模型。我的問題是結果不一致。數組顯示長度爲0有時
我有一個加入的目錄列表,用於跟蹤用戶加入的目標。假設這個集合包含兩個ID爲1和3的目標。當用戶訪問/目標/ 3時,應該顯示一條消息,說明用戶已加入目標
我遇到問題,我正在訪問/目標/ 3,消息顯示時間的一半,而另一半時間,消息不顯示。
奇怪的是,這個問題只發生在我的遠程服務器上,而不是在我的本地主機上。
在我的代碼中,我查詢了3個ID的joinedGoalList,如果匹配,我知道matches數組必須大於0,所以我呈現顯示用戶已加入目標的消息。
下面是代碼(joinedGoalList是骨幹集:
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)
的結果,這裏的結果(它們是一致的):
child
_byCid: Object
_byId: Object
_callbacks: Object
length: 2
models: Array[2]
__proto__: ctor
正如你所看到的,長度爲2.其中一個對象的ID爲1,另一個對象的ID爲3.這在整個頁面加載過程中保持一致。
存在不一致rs當我在數組上匹配一個ID爲3的對象時。某些頁面加載找到匹配,而其他頁面加載找不到匹配。
的console.log(matches.length)
的結果是我的遠程服務器上的0或1,但在我的本地,結果總是1.
「只是發生我的遠程服務器上的」聞起來像一個競爭條件我 –
你確定你不檢查集合之前已經填充了來自服務器的數據?底層的'fetch'畢竟是異步的。 –
我建議還要將集合中模型的ID記錄到控制檯,以便您可以確定您擁有的是什麼。您正在查詢的模型是否確實保存過,或者在那個點上是否有'id'設置?注意,爲什麼在這裏使用'where()' - 爲什麼不使用'joinedGoalList.get(this.model.get('id'))'? – JMM