2012-04-01 16 views
15

पर क्वेरी स्ट्रिंग कैसे पास कर सकता हूं मैं बैकबोन.जेएस और jQuery-मोबाइल का उपयोग कर रहा हूं। jQuery-मोबाइल रूटिंग अक्षम है और मैं केवल UI के लिए lib का उपयोग कर रहा हूं। पेज संक्रमण का चयन करने के अलावा, मुझे सब कुछ मिल रहा है। मुझे पेज संक्रमण ('स्लाइस-अप', 'फीड', 'स्लाइड-डाउन') को बैकबोन राउटर में पास करने की आवश्यकता है क्योंकि संक्रमण कहां से आता है, इस पर निर्भर करता है।मैं बैकबोन.जेएस रूटिंग

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

class App.Routers.Foods extends Backbone.Router 
    routes: 
    '': 'index' 
    ':transition': 'index' 
    'foods/new': 'new' 
    'foods/new/:transition': 'new' 

    initialize: -> 
    @collection = new App.Collections.Foods() 
    @collection.fetch() 

    index: (transition)-> 
    view = new App.Views.FoodIndex(collection: @collection) 
    App.changePage(view, transition) 

    new: (transition)-> 
    view = new App.Views.FoodNew(collection: @collection) 
    App.changePage(view, transition) 

यहाँ डिफ़ॉल्ट संक्रमण के लिए एचटीएमएल लिंक है:

<a href="#" data-icon="back" class="ui-btn-left">Back</a> 

यहाँ एचटीएमएल लिंक है फीका संक्रमण के लिए:

<a href="#fade" data-icon="back" class="ui-btn-left">Back</a> 

क्वेरी स्ट्रिंग का उपयोग करना, यानी/खाद्य/नई संक्रमण = 'फीका' निश्चित रूप से bett है er लेकिन मुझे नहीं पता कि क्वेरी स्ट्रिंग चर का उपयोग करने के लिए रीढ़ की हड्डी रूटिंग को कैसे परिभाषित किया जाए।

मुझे यह कैसे करना चाहिए?

क्या मेरी समस्या को संभालने का एक और शानदार तरीका है, यानी वेरिएबल को यूआरएल का उपयोग न करने से गुजर रहा है?

उत्तर

12

आपको राउटर फ़ंक्शंस के अंदर URL पैरामीटर मैन्युअल रूप से पार्स करना होगा।

class App.Routers.Foods extends Backbone.Router 
    routes: 
    '': 'index' 
    'foods/new': 'new' 

    initialize: -> 
    @collection = new App.Collections.Foods() 
    @collection.fetch() 

    index:()-> 
    view = new App.Views.FoodIndex(collection: @collection) 
    App.changePage(view, getQueryVariable('transition')) 

    new:()-> 
    view = new App.Views.FoodNew(collection: @collection) 
    App.changePage(view, getQueryVariable('transition')) 

JS function क्वेरी पैरामीटर पार्स करने के लिए।

function getQueryVariable(variable) { 
    var query = window.location.search.substring(1); 
    var vars = query.split("&"); 
    for (var i = 0; i < vars.length; i++) { 
     var pair = vars[i].split("="); 
     if (pair[0] == variable) { 
      return unescape(pair[1]); 
     } 
    } 
    return false; 
} 

आपको निश्चित रूप से जेएस फ़ंक्शन को सीएस में परिवर्तित करना होगा, लेकिन आपको यह विचार मिल जाएगा।

+7

2012 में 'अनदेखा'? मैं इतिहास के कचरे में 'एस्केप 'और' अनस्केप 'छोड़ने की सिफारिश करता हूं,' एनकोडुरिकॉम्पोनेंट 'और [' डीकोडुरिकोम्पोनेंट'] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/decodeURIComponent) आमतौर पर क्या होते हैं आप उपयोग करना चाहते हैं। –

+1

एक समस्या है। मार्ग क्वेरी स्ट्रिंग वाले यूआरएल से मेल नहीं खाएंगे। क्वेरी स्ट्रिंग को अनुमति देने वाले मार्गों को परिभाषित करने के लिए नियमित अभिव्यक्ति का उपयोग किया जाना चाहिए। – PreslavLe

+6

मुझे यह रीढ़ की हड्डी प्लगइन मिली जो मुझे बिल्कुल चाहिए! https://github.com/jhudson8/backbone-query-parameters – PreslavLe

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