これは質問ではありませんが、そのコードで他の人を助けることができるかもしれません。
ExtJS ストアには isLoaded() のようなものがないため、オーバーライドします。しかし、それを理解して機能させるには、少し時間がかかります。これがコードです(コーヒースクリプト)。お気軽にご利用ください。
これを行うことで、任意のストア (関連付けも) で実行できます。
store.isLoaded
ストアでメソッドを呼び出したいが、ストアをロードする必要がある場合は、使用できます
store.invokeWhenLoaded(yourFunction)
コードは自明です(私は思う:-))
###
Because Ext.data.Store is missing something like 'isLoaded'
this adds the possibility to figure it out.
As a bonus ;-) there is a method called invokeWhenLoaded that you can
pass a function to that will be called once the store is loaded.
###
Ext.data.AbstractStore.override(
constructor:(config) ->
# Add additional properties to config
Ext.apply(config, {
isLoaded: false
waitlist: []
})
# Call overridden constructor and remember return value
rslt = @callOverridden(arguments)
# Add onLoad listener
@on('load', @onLoad)
rslt
# Executes each function in the waitlist and finally clears the waitlist
processWaitlist:()->
unless @waitlist.isEmpty()
fn() for fn in @waitlist
@waitlist = []
###
Executes fn if the store is loaded or adds it to the waitlist if not.
The fn will be called as soon the store is loaded
It will try to load the store as well unless param loadLater is true
Params:
fn - the function to call once the store is loaded
###
invokeWhenLoaded:(fn)->
if @isLoaded
fn()
else
@waitlist.push(fn)
###
@private event onLoad
"Fires whenever the store [has read] data from a remote data source."
###
onLoad:()->
unless @isLoaded
@isLoaded = true
@processWaitlist()
)