我有一個預加載的骨幹集合和模型的對象圖。要初始化我的用戶界面,我需要確保集合已加載,然後使用get()
通過ID從它們中拉出一些項目。我想要一個接受回調的方法,如果集合已加載,則該回調要麼立即調用,要麼延遲到集合被加載。jQuery.ready(fn)用於Backbone集合和模型
到目前爲止,我有一個mixin以下憎惡
window.BackboneReady =
onReady: (cb)->
if @loaded_
console.log "Calling onReady immediately"
cb(@)
else
console.log "Scheduling onReady for later"
@once 'sync', =>
console.log "onReady fired in callback"
@loaded_ = true
cb(@)
但是,它只能有時(我看到消息「調度onReady爲後來的」,但從來沒有執行我的事件處理程序)。 Rant:看起來Backbone甚至沒有一個基本的信號變量來告訴我該對象是否同步,這看起來完全荒謬。
完成此操作的理智方式是什麼?每次我想爲我的UI集合中的對象get()
時,我都不想撥打fetch()
,因爲這首先破壞了預先加載對象圖的目的。
我已經在使用這種方法,但是我需要做一個'Collection#get()',它不會做承諾包裝 - 它只是給了我'未定義的',如果物品尚未到達。 – Julik
你可以在上面完成的'done'回調中完成(我編輯了我的anser),或者實現類似上面的'getIfLoaded'的東西。 –
這是我結束了,謝謝。也許我只需要在當前應用程序狀態的所有'fetch()'承諾都爲'done()'時分割'fetch()'和'get()'的承諾步驟並執行'get ' - 在'then()'中加上它 – Julik