2015-03-27 8 views
6

में देरी के बिना काम नहीं करेगा, मैं रेफ्लक्स का उपयोग करता हूं, और आम तौर पर मैं एजेक्स कॉल करने के बाद ट्रिगर कर रहा हूं, और यह अच्छी तरह से काम करता है। परीक्षण उद्देश्यों के लिए मुझे 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) 

आप कारण है कि यह एक देरी के बिना काम नहीं करता है समझाने और यह होना चाहिए कर सकते हैं

उदाहरण काम कर रहे हैं? क्या यह एक बग या कुछ है जो मुझे समझ में नहीं आता है।

उत्तर

5

ऐसा इसलिए है क्योंकि घटक 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 ;-) 
:

मैं निम्नलिखित परिवर्तन सुझाव देंगे

संबंधित मुद्दे