2013-09-29 16 views
7

मेरे पास एम्बर रूटिंग सिस्टम से संबंधित एक प्रश्न है।संक्रमण के बिना यूआरएल बदलें

मेरे एम्बर-ऐप में, मेरे पास एक साधारण पुस्तिका पूर्णस्क्रीन मानचित्र है। इस मानचित्र का केंद्र और ज़ूम स्तर URL क्वेरी पैरामीटर से आ रहा है। अब मैप स्थिति के साथ इस क्वेरी पैरामीटर को सिंक में रखने का एक आसान तरीका होना अच्छा होगा। तो जब कोई नक्शा चलाता है, तो मैं यूआरएल क्वेरी पैरामीटर को नए मानों में बदलना चाहता हूं।

जब मैं एक साधारण transitionTo का उपयोग करता हूं, तो मैं मानचित्र को बदलने और क्वेरी पैरामीटर को फिर से बदलते हुए क्वेरी पैरामीटर अपडेट करने का एक लूप शुरू करता हूं।

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

+0

आपको स्थान ऑब्जेक्ट या उसके जैसा कुछ मैन्युअल रूप से यूआरएल अपडेट नहीं करना चाहिए। एम्बर में उपस्थिति को प्रभावित करने का तरीका मार्गों का उपयोग है और उन्हें गतिशील खंड जोड़ना है। – mavilein

+0

निम्न लिंक पर एक नज़र डालें: http: // stackoverflow।कॉम/प्रश्न/15165072/आईएस-रिसोर्स-नेस्टिंग-द-ओन-वे-टू-सक्षम-एकाधिक-गतिशील-सेगमेंट/15174766 # 15174766 http://mavilein.github.io/javascript/2013/09/28/ तीन-चरण-से-एम्बर-जेएस-एसईओ-फ्रेंडली-यूआरएल/ – mavilein

+0

और यह एक -> http://stackoverflow.com/questions/18164461/how-do-you-maintain-the-page-state-so- वह-आप-प्रदान-प्रदान-परमालिंक-उपयोग-एंब/1824 9 404 # 1824 9 404 उन लिंक में आपके द्वारा आवश्यक सभी सामग्री शामिल हैं। यदि आपको समस्याएं हैं, तो JSFiddle या JSBin बनाएं और मैं आपको मूल उदाहरण बनाने में मदद कर सकता हूं। – mavilein

उत्तर

7

, एंबर में आप भी ऐसा कर सकता है ताकि आप एक के माध्यम से जाना नहीं है:

इसके अलावा मेरे सहयोगी राउटर का उपयोग कर यह पूरा करने की सिफारिश की संक्रमण या/पुन: लोड डेटा प्रतिपादन

Ember.run(function(){ 
    window.history.replaceState({} , 'foo', '/foo'); 
}); 

या लेगेसी ब्राउज़र के लिए हैश का उपयोग:

Ember.run(function(){ 
    location.hash = 'foo'; 
}); 
+0

'window.history.replaceState ({}, 'foo', '/ foo'); 'मेरे लिए अच्छा काम किया – mihai

3

http://emberjs.com/api/classes/Ember.HistoryLocation.html#method_replaceState

संकुल में परिभाषित किया जाता है/एंबर-मार्ग/lib/स्थान/history_location.js: 134

मैं इस परीक्षण नहीं किया लेकिन:

Ember.HistoryLocation.replaceState(<string>); 

काम करना चाहिए। ऊपर मेरा उत्तर के लिए कई downvotes बाद

http://emberjs.com/blog/2013/02/15/ember-1-0-rc.html#stq=&stp=0

router.replaceWith('index'); 
+0

यह वादा करता है। क्या आपको पता है कि स्थान का उपयोग कैसे करें? शायद मार्ग में कार्रवाई के माध्यम से? मैं एम्बर के लिए बहुत नया हूं और किसी तरह का सर्वोत्तम अभ्यास ढूंढ रहा हूं। – Johnny

+0

हाँ, मैंने मानचित्र को पुनः लोड करने के अपने कोड में एक गलती की है। अब मैंने इसे ठीक किया है और जैसा कि आपने यूआरएल को बदलने के लिए 'राउटर.रेप्लेसविथ (' इंडेक्स ') का इस्तेमाल किया था। धन्यवाद! – Johnny

+0

नया मार्ग मेरे लिए काम नहीं कर रहा है जब नया मार्ग पुराने मार्ग के समान है। क्या यह सामान्य है या क्या मुझे कुछ याद आ रहा है? – elsurudo

2

जब आप यूआरएल को बदलना चाहते हैं तो URL को बदलने के सीधे आगे दृष्टिकोण का उपयोग करने के पिछले उत्तरों को जोड़ने के लिए, वर्तमान एम्बर संस्करणों पर नियंत्रक गुणों के लिए क्वेरी पैरामीटर को जोड़ने का एक विकल्प है।

एक साधारण उदाहरण Ember guide page से संकलित:

App.MapController = Ember.ObjectController.extend({ 
    queryParams: ['zoom', {latitude: 'lat'}, {longitude: 'lon'}], 

    zoom: 10, 
    latitude: null, 
    longitude: null, 

    mapWindowChanged: function { 
    MapApi.reposition(this.zoom, this.latitude, this.longitude); 
    }.observes('zoom','latitude','longitude') 
}); 

जब इस तरह पैरामीटर क्वेरी का उपयोग, नियंत्रक/दृश्य कोड सिर्फ बाध्य नियंत्रक गुण बदल सकते हैं और क्वेरी पैरामीटर आप अपडेट हो जाएगा। इस प्रकार

उपयोग Ember.Route queryParams property रास्ता क्वेरी पैरामीटर प्रभाव मार्ग घटनाओं को बदलने के लिए:

App.MapRoute = Ember.Route.extend({ 
    queryParams: { 
    lat: { 
     refreshModel: true, 
     replace: true, 
    }, 
    long: { 
     refreshModel: true, 
     replace: true, 
    }, 
    zoom: { 
     replace: true 
    } 
    } 
}); 

यह एंबर बता सर्वर से जरूरत भागों को फिर से लोड करने के लिए जब नक्शा झुकाव होगा, लेकिन नहीं जब जूम बदलते। साथ ही, बदलते पैरामीटर राज्य वस्तुओं को ब्राउज़र इतिहास में धक्का नहीं देंगे।

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