2014-09-19 10 views
18

में 1.7 एम्बर क्वेरी पैरामीटर का समर्थन करना चाहिए। मुझे नियंत्रक में उनका उपयोग करने में कोई समस्या नहीं है, लेकिन मैं रूट में उन्हें एक्सेस करना चाहता हूं, आदर्श रूप से पहले मॉडल हुक में लेकिन मॉडल हुक भी काम करेगा।एम्बर में रूट से क्वेरी पैरामीटर तक कैसे पहुंचे 1.7

API docs पहले मॉडेल हुक के लिए एक quereyParam पैरामीटर का उल्लेख करें, लेकिन अगर मैं इसका उपयोग करने की कोशिश करता हूं, तो यह हमेशा अनिर्धारित होता है।

Query Parameters guide यह सुझाव देता है कि क्वेरी पैरामीटर मॉडल हुक के पहले पैरामीटर के हिस्से के रूप में सुलभ होना चाहिए। लेकिन यह भी अनिर्धारित है। उदाहरण के लिए नीचे दिए गए कोड को देखें।

क्या मार्ग से क्वेरी पैरामीटर तक पहुंचने का कोई तरीका है? आपकी मदद के लिए धन्यवाद।

App.ApplicationRoute = Em.Route.extend({ 
    beforeModel: function(transition, queryParams){ 
     console.log(queryParams.test); //undefined at /?test=123 
    }, 
    model: function(params){ 
     console.log(params.test); //undefined at /?test=123 
    } 
}); 
+2

आपको मॉडल हुक में 'पैराम्स' ऑब्जेक्ट से इसे खींचने में सक्षम होना चाहिए। देखें: http://emberjs.jsbin.com/necid/1/edit?html,js,console ,output क्या आप नियंत्रक में क्वेरी पैराम के रूप में 'test' सेट कर रहे हैं? – tikotzky

+0

धन्यवाद, वह था। यह मेरे लिए कभी नहीं हुआ कि नियंत्रक मार्ग को प्रभावित कर सकता है। मैंने सोचा था कि सेटिंग केवल नियंत्रक में क्वेरी पैराम तक पहुंचने के लिए थी। – jancervinka

उत्तर

19

सुंदर यकीन है कि यह एक बग है, लेकिन आप संक्रमण वस्तु के माध्यम से इस बीच में उन तक पहुँच सकते हैं:

App.ApplicationRoute = Em.Route.extend({ 
    beforeModel: function(transition){ 
     console.log(transition.queryParams.test); 
    } 
} 
+2

धन्यवाद, यह काम करता है और यह पहले मॉडल में ऐसा करने के लिए क्लीनर है। यह अजीब बात है कि 1.8.1 में भी यह तय नहीं किया गया है। मुझे यकीन नहीं है कि यह एक बग है या सिर्फ एक अस्पष्ट दस्तावेज है। – jancervinka

+0

@typeoneerror: आपका समाधान केवल तभी काम करता है जब स्थान टाइप ऑटो है। क्या आप जानते हैं कि क्वेरी पैरा हैश कैसे प्राप्त करें यदि स्थान का प्रकार हैश –

6

नियंत्रक में क्वेरी पैरामीटर निर्दिष्ट करके, params उन्हें स्वचालित रूप से

में शामिल होंगे
ApplicationController = Ember.Controller.extend({ 
    queryParams: ['test'], 
    test: null 
}); 
+0

उन्हें कैसे एक्सेस कर सकता है? 'console.log (this.get ('test')) 'मुझे एक अपरिभाषित कर रहा है। धन्यवाद! –

+0

बिल्कुल ... एक ही मुद्दा? – testndtv

+1

मार्ग में आप 'this.controller.get ('test')' – Voles

-4

आप didTransiti में उपयोग करने के लिए चाहते हैं कार्रवाई पर,

didTransition: (queryParams) -> 
    console.log(@get('queryParams')) 
5

नवीनतम एंबर संस्करण में आप रूट में मूल्य के रूप में

import Ember from 'ember'; 
export default Ember.Route.extend({ 
    beforeModel(params){ 
     console.log(params.queryParams.test); //if the parameter contains test as the key 
    } 
}); 

यह केवल तभी कारगर साबित locationType अपने environment.js फ़ाइल में ऑटो है प्राप्त कर सकते हैं।

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    queryParams: { 
     test: '' 
    }, 
    model(params) { 
     console.log(params.test); 
    }, 
}); 

दोनों गतिशील खंड अब है कि ध्यान से देखें और queryParams के माध्यम से सुलभ हैं:

5

(इस जवाब लिखने के समय 2.12) एंबर के नवीनतम संस्करण में, queryParams मॉडल हुक में इस प्रकार पहुँचा जा सकता है params ऑब्जेक्ट। चूंकि paramsbeforeModel हुक में उपलब्ध नहीं है, इसलिए यह समाधान model हुक में queryParams तक पहुंचने पर काम करता है।

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