2011-12-18 12 views
16

बैकबोन.जेएस में समान स्थान मार्ग को ट्रिगर करने का कोई तरीका है, उदाहरण के लिए जब स्थान /My/App/#/About है और उपयोगकर्ता पृष्ठ सामग्री को रीफ्रेश करने के लिए उसी रूट के साथ एंकर पर फिर से क्लिक करता है।ट्रिगर एक ही स्थान मार्ग

उत्तर

6
Router.navigate('about', true); 

इस तरह आप मैन्युअल रूप से मार्ग को ट्रिगर कर सकते हैं।

+3

पुराना अब: https://github.com/jashkenas/backbone/issues/1214 – hongymagic

3

मान लिया जाये कि तुम सिर्फ बारे में पेज, उपयोग की तुलना में अधिक के लिए ऐसा करना चाहते हैं:

route = Backbone.history.fragment; 
yourRouter.navigate(route, true); 
1

रीढ़ का उपयोग करके आप पारित में एक विकल्प वस्तु और 'सही' के लिए 'ट्रिगर' सेट 0.9.2।

router.navigate('some/route', { trigger : true }); 

संदर्भ: http://documentcloud.github.com/backbone/#Router-navigate

+0

यह वर्तमान मार्ग को पुनः लोड करने के लिए काम नहीं करता है। लक्ष्य खंड मौजूदा खंड से मेल खाता है तो रिटर्न नेविगेट करें। – DriverDan

52
Backbone.history.loadUrl(Backbone.history.fragment); 

अपने विशिष्ट समस्या के लिए समाधान वास्तव में दर्ज नहीं किया जाता है और सुझाव सबसे अच्छा अभ्यास सिर्फ समारोह है कि मार्ग आप करना चाहते हैं में घोषित किया जाता है कॉल करने के लिए है लगता है आग:/

रेफरी: https://github.com/documentcloud/backbone/issues/1214

अब तक अन्य उत्तर सही हैं, लेकिन वे कहते हैं कि अगर उल्लेख करना भूल गया हैश नेविगेट किया है जो वर्तमान हैश के समान है, कुछ भी आग नहीं लगेगा।

+3

ऐसा लगता है कि यह एकमात्र उत्तर है जो वास्तव में एक ही पृष्ठ को रीफ्रेश करने की अनुमति देता है, धन्यवाद! –

+2

क्या हम बैकबोन.history.getFragment() का उपयोग नहीं करना चाहिए, इसलिए हम इतिहास की गुणों तक नहीं पहुंचते हैं? मेरे दिमाग में क्लीनर लगता है। – Rob

+0

'getFragment()' निश्चित रूप से अधिक आधुनिक रीढ़ की हड्डी के साथ एक और अधिक उचित दृष्टिकोण होगा। हालांकि, मैं अद्यतन करने के लिए राउटर को ट्रिक करने की कोशिश करने के बजाय घोषित फ़ंक्शन चलाने के बारे में टिप्पणी +1 करूंगा। – mix3d

2

चूंकि बैकबोन राउटर यूआरएल खंड में परिवर्तन की तलाश करता है, जिसे आप लोड करना चाहते हैं, मेरे लिए क्या काम किया जाता है, बिना किसी ट्रिगर के पहले '/' पर नेविगेट करना होता है, और उसके बाद यूआरएल (टुकड़ा) के साथ आप हिट करना चाहते हैं ट्रिगर। यदि आप चाहें तो संभवतः आप डिफ़ॉल्ट राउटर व्यवहार में इसे आसानी से बना सकते हैं।

उदा।

App.Routers.appRouter.navigate '/', {trigger: false} 
App.Routers.appRouter.navigate myPath, {trigger: true} 
0

सुझाव @ डेविडवेयर, वास्तव में कमाल के लिए धन्यवाद। मैंने अपनी एक छोटी सी संपादन को जोड़ा जो जांच करता है कि क्या आप अंतिम (सबसे वर्तमान) यूआरएल पर हैं, और यदि ऐसा है, तो वह इतिहास लोड करता है। बहुत आसान, सोचा कि यह किसी भी मुद्दे के साथ किसी की मदद कर सकता है।

$("[data-href]").on("click", function(e) { 
    var href; 
    e.preventDefault(); 
    href = $(e.currentTarget).data("href"); 
    if ((_.last(this.history)) === href) { 
    return Backbone.history.loadUrl(_.last(this.history)); 
    } else { 
    return this.router.navigate(href, true); 
    } 
}); 
+0

इसे कॉफ़ीस्क्रिप्ट के बजाय नियमित जावास्क्रिप्ट में साझा करने की देखभाल है? – mix3d

+1

@ mix3d सुनिश्चित करें। मैंने मूल पोस्ट संपादित किया। –

0

एक अन्य विकल्प: यदि आप एक यादृच्छिक मूल्य के साथ एक पैरामीटर जोड़ सकते हैं ताकि हैश प्रत्येक कॉल के लिए अलग-अलग होगा, भले ही आप एक ही पृष्ठ कहते हैं।

-1

राउटर.नाविगेट (मार्ग, {ट्रिगर: झूठा}); // परिवर्तन यूआरएल लेकिन यह ट्रिगर नहीं करेगा ... उदाहरण के लिए: मार्ग के स्थान में - 'के बारे में/1' या 'के बारे में' आदि

Backbone.history.loadUrl (Backbone.history.fragment); // परिवर्तित मार्ग यहां ट्रिगर किया जाएगा।

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