如果没有延迟初始化,回流触发器将无法工作
Posted
技术标签:
【中文标题】如果没有延迟初始化,回流触发器将无法工作【英文标题】:Reflux trigger won't work without a delay in init 【发布时间】:2015-06-01 06:03:55 【问题描述】:我使用 Reflux,通常我在进行 ajax 调用后触发,并且效果很好。出于测试目的,我不需要 ajax 调用,并且我注意到除非我给出 5 毫秒的超时时间,否则触发器将不起作用。这是工作和不工作的例子。
不工作的例子:
window.threadStore = Reflux.createStore
init: ->
@state = @getInitialState()
@fetchThreads()
getInitialState: ->
loaded: false
threads: []
fetchThreads: ->
# ajax call for not Testing, and just trigger for Testing
@state.threads = FakeData.threads(20)
@state.loaded = true
@trigger(@state) # This will NOT work!
这将起作用:
window.threadStore = Reflux.createStore
init: ->
@state = @getInitialState()
@fetchThreads()
getInitialState: ->
loaded: false
threads: []
fetchThreads: ->
# ajax call for not Testing, and just trigger for Testing
@state.threads = FakeData.threads(20)
@state.loaded = true
setTimeout( =>
@trigger(@state) # This WILL work!
, 500)
你能解释一下为什么它不能立即工作吗?应该这样做吗?这是一个错误还是我不明白的东西。
【问题讨论】:
【参考方案1】:这是因为组件从getInitialState
获取空数组,并且它发生在调用trigger
之后。
init
在创建存储实例时被调用,这意味着fetchThreads
中的触发器在组件安装之前立即被调用。当监听组件稍后被挂载时,它会从 getInitialState
上的存储中获取空数组。
我建议进行以下更改:
window.threadStore = Reflux.createStore
init: ->
@state =
loaded: false
threads: []
@fetchThreads()
getInitialState: ->
@state # TODO: State should be cloned for sake of concurrency
fetchThreads: ->
# NOTE: Assign a new state for the sake of concurrency
@state =
loaded: true
threads: FakeData.threads(20)
@trigger(@state) # This will SHOULD work now ;-)
【讨论】:
以上是关于如果没有延迟初始化,回流触发器将无法工作的主要内容,如果未能解决你的问题,请参考以下文章
LazyInitializationException: 延迟初始化角色集合失败 无法初始化代理 - 没有会话
无法延迟初始化角色集合:myapp.myapp.models.Contact.messages,无法初始化代理 - 没有会话
未能延迟初始化角色集合:无法初始化代理 - Hibernate 中的 @ManyToMany 映射注释中没有会话错误? [复制]
休眠延迟加载不适用于 Spring Boot => 无法延迟初始化角色集合无法初始化代理 - 无会话