2013-09-04 6 views
6

मैं ember.js पर लाइव खोज कर रहा हूं। इस कोड कोसंक्रमण के लिए सही तरीका ToRoute

App.Router.map -> 
    @resource "index", {path : "/"} 
    @resource "index", {path : "/:query"} 

App.Torrents = 
    findByQuery : (query) -> 
     url = "/api/find/#{query}" 
     $.getJSON(url) 

App.IndexRoute = Ember.Route.extend 

    model : (params) -> 
     App.Torrents.findByQuery(params.query) 

App.IndexController = Ember.ArrayController.extend 

    onChangeQuery : _.debounce(-> 
     query = @get("query") 
     @transitionToRoute("index", {query : query}) 
    , 500).observes("query") 

मैं एक प्रश्न संपत्ति एक इनपुट से आबद्ध है। जब इनपुट परिवर्तन मैं नए क्वेरी पैरामीटर को पारित करने के मार्ग में संक्रमण करना चाहता हूं, लेकिन IndexRoute.model विधि को नहीं कहा जा रहा है।

+0

एम्बरजे का कौन सा संस्करण आप उपयोग कर रहे हैं ??? एम्बर के पिछले संस्करणों में 'संक्रमण' में एक असंगतता थी। लेकिन उम्मीद है कि इसे 'राउटर फेसिलिफ्ट' – selvagsz

+0

के साथ हल किया गया है, मैं 1.0.0 – axelhzf

+0

का उपयोग कर रहा हूं मेरे पास दो संसाधन हैं क्योंकि मैं क्वेरी पैरामीटर वैकल्पिक बनाने की कोशिश कर रहा हूं – axelhzf

उत्तर

9

कारण IndexRoute.model विधि नहीं कहा जा रहा है।

एक गतिशील सेगमेंट वाला एक मार्ग केवल यूआरएल के माध्यम से दर्ज होने पर मॉडल मॉडल हुक होगा। यदि मार्ग एक संक्रमण के माध्यम से दर्ज किया जाता है (उदाहरण के लिए लिंक-हैंडलबार्स सहायक का उपयोग करते समय), तो मॉडल संदर्भ पहले ही प्रदान किया जा चुका है और हुक निष्पादित नहीं किया गया है। गतिशील खंडों के बिना मार्ग हमेशा मॉडल हुक निष्पादित करेंगे।

here समझाया गया।

इसलिए this issue में चर्चा के अनुसार, इन मामलों में, अपने मॉडल को लाने के लिए setupController हुक का उपयोग करें।

कार्य अपने कोड की bin, साथ setupController

+0

अच्छा, यह मेरी समस्या का समाधान करता है, धन्यवाद – axelhzf

+3

नोटिस, कि यदि आप गतिशील सेगमेंट के रूप में एक ट्रांज़िशन को ट्रांज़िशन टू/ट्रांजिशन टॉर रूट 'में पास करते हैं, तो मॉडल हुक हिट हो जाएगा। ऑब्जेक्ट पास करें, और इसे छोड़ दिया जाएगा, लेकिन 'पहले मॉडल' और 'मॉडल के बाद' अभी भी हिट हो जाएगा। – knownasilya

+0

ईमानदारी से, प्रदान किए गए उद्धरण ने मुझे हमेशा भ्रमित कर दिया है। यह हमेशा ऐसा लगता है: "मॉडल हुक केवल गतिशील मार्गों पर एक बार बुलाया जाता है, लेकिन मॉडल हुक गतिशील मार्गों पर हर बार बुलाया जाता है" समझ में नहीं आता है ... अब तक मुझे समझ में आया, लेकिन यह अभी भी वास्तव में भ्रमित हो रहा है । – Preexo

2

माफ करना, मैं देर हो रही है और यह आपके लिए किसी काम के नहीं हो सकता है। मैं इसे यहां पोस्ट करना चाहता था, अगर यह दूसरों के लिए किसी भी तरह का उपयोग हो सकता है।

इस लिंक ने मेरी समस्या को स्पष्ट करने में मेरी मदद की।

दृष्टिकोण 1: हम मार्ग के लिए एक मॉडल की आपूर्ति कर सकते हैं। मॉडल URL मार्ग की serialize हुक का उपयोग करते हुए श्रृंखलाबद्ध जाएगा:

var model = self.store.find('campaign', { fb_id: fb_id }); 
self.transitionToRoute('campaign', model); 

इस मार्ग के लिए ठीक काम करेंगे, लेकिन यूआरएल छेड़छाड़ की जा सकती है। इस मामले के लिए, हमें नए मार्ग में पारित वस्तु को क्रमबद्ध करने और यूआरएल को सही करने के लिए अतिरिक्त तर्क जोड़ने की जरूरत है।

दृष्टिकोण 2: यदि कोई शाब्दिक पारित होता है (जैसे कोई संख्या या स्ट्रिंग), तो इसे इसके बजाय पहचानकर्ता के रूप में माना जाएगा। इस मामले में, मार्ग के मॉडल हुक ट्रिगर किया जाएगा:

self.transitionToRoute('campaign', fb_id); 

यह मॉडल() आह्वान हैं और सही ढंग से मार्ग पर आवश्यक URL को प्रदर्शित होगी। setupController() मॉडल() के तुरंत बाद आवंटित किया जाएगा।

दूसरे ने मेरे लिए ठीक काम किया। उम्मीद है कि यह उपयोगी है और उपरोक्त प्रश्न का उत्तर दिया।

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