2014-05-02 8 views
13

मैं टाइपहेड के लिए कुछ डेटा प्राप्त करने के लिए रक्तचाप का उपयोग करता हूं। मेरे खोजी कुत्ता वस्तु:typeahead.js: रिक्त क्वेरी पर सभी ब्लडहाउंड रिकॉर्ड लौटें

var lastAdresses = new Bloodhound({ 
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'), 
    queryTokenizer: Bloodhound.tokenizers.whitespace, 
    prefetch: { 
    url: '/_dev_data_sources/last_adresses_json.html', 
    }, 
    limit: 20 
}); 



lastAdresses.initialize().done(function() { 
    var query = "L"; 
    lastAdresses.get(query, function(suggestions) { 
    console.log(suggestions); 
    }); 
}); 

यह ठीक काम करता है, जब मेरे प्रश्न है उदाहरण की तरह "L", या किसी अन्य स्ट्रिंग। लेकिन जब मैं अपनी क्वेरी "" करता हूं, तो मैं सभी उपलब्ध रिकॉर्ड्स को वापस लौटना चाहता हूं। मेरे उदाहरण में, यह कुछ भी नहीं देता है।

मैंने देखा, कि रक्तचाप में फ़िल्टर तर्क है, लेकिन मुझे नहीं पता कि इसका उपयोग कैसे किया जाए।

क्या कोई मेरी मदद कर सकता है?

+0

जैसे ही पृष्ठ लोड सभी सुझावों को प्रदर्शित करने के Typeahead करना चाहते हैं? –

+0

हां, यह मेरा इरादा था। मैंने देखा कि टाइपहेड-टीम इस पर काम कर रही है लेकिन मैं इंतजार नहीं कर सकता। और यह अब पर्यवेक्षक फ़ंक्शन को स्रोत के रूप में जोड़कर काम करता है जो जांचता है कि क्वेरी "" है और यदि ऐसा है तो यह सभी डेटा सरणी के रूप में देता है। – user1383029

+1

क्या आप इसे दिखाने के लिए कहीं भी कोड पोस्ट कर सकते हैं? मुझे सभी रिकॉर्ड दिखाने की भी आवश्यकता है ... धन्यवाद =) – gobwas

उत्तर

1

ब्लडहाउंड क्वेरी शर्तों के कुशल मिलान के लिए SearchIndex नामक एक आंतरिक प्रकार का उपयोग करता है।

आप किसी दिए गए प्रश्न के लिए लौटाए गए रिकॉर्ड को बदलने के लिए monkey patchSearchIndex.get कर सकते हैं।

यह फ़ंक्शन एक खोजी कुत्ता उदाहरण पैच एक खाली क्वेरी शब्द के लिए सभी रिकॉर्ड वापस जाने के लिए:

// Patch the given Bloodhound instance 
// to match all records for an empty query 
function enableMatchAll(bloodhound) { 
    var _get = bloodhound.index.get; 
    bloodhound.index.get = function(query) { 
    if(!query || query === '') { 
     return this.datums; 
    } else { 
     return _get.call(this, query); 
    } 
    } 
} 

JSBin demo

पता है कि इस पैच अप्रलेखित आंतरिक कार्यक्षमता का उपयोग करता है। यह टाइपहेड/ब्लडहाउंड v0.10.5 के लिए काम करता है; यह किसी अन्य संस्करण के साथ काम कर सकता है या नहीं भी हो सकता है।

6

मुझे लगता है कि ऐसा करने का एक बेहतर तरीका हो सकता है। लेकिन यह अभी भी आंतरिक रक्तचाप कार्यान्वयन पर निर्भर करता है जो बदल सकता है। SearchIndex और अपने कार्य all() कि खोजी कुत्ता द्वारा संग्रहीत डेटा की पूरी सूची रिटर्न कहा जाता

var searchEngine = new Bloodhound({...}); 
function searchWithDefaults(q, sync) { 
    if (q === '') { 
    sync(searchEngine.index.all()); 
    } else { 
    searchEngine.search(q, sync); 
    } 
} 
$("#typeahead").typeahead({ 
    minLength : 0, 
}, { 
    name : 'typeahead', 
    source : searchWithDefaults 
}); 

इस कोड Bloodbound आंतरिक खोज इंजन के कार्यान्वयन का लाभ लेता है।

उत्तर से प्रेरित:

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