2015-11-04 25 views
1

我想在geojson中使用帶有標記圖層的搜索框中的typeahead和bloodhound。使用傳單地圖和坐在自舉導航欄中的搜索框,用戶可以查找地圖上顯示的項目。Typeahead和Bloohdound與geojson標記

有一些我只是不明白在實施bloodhound和打字。我一直無法使它工作。

首先,我使用的Array.push方法來使用這個代碼從層發送信息到一個數組:

function onEachFeatureProj(feature, layer) { 
var ProjPopup = 
    '<strong>Organization: ' + feature.properties.OrgName + '</strong>'; 
ProjSearch.push({ 
    name: layer.feature.properties.OrgName, 
    source: "CSJ 2014", 
    id: L.stamp(layer), 
    lat: layer.feature.geometry.coordinates[1], 
    lng: layer.feature.geometry.coordinates[0] 
    }); 
layer.bindPopup(ProjPopup); 
} 

然後,我定義獵犬元素:

var ProjBH = new Bloodhound({ 
name: "CSJ 2014", 
datumTokenizer: function (d) { 
    return Bloodhound.tokenizers.whitespace(d.OrgName); 
}, 
queryTokenizer: Bloodhound.tokenizers.whitespace, 
local: ProjSearch, 
limit: 10 
    }); 
    ProjBH.initialize(); 

最後,我開始預輸入發送到這個搜索框:

/* instantiate the typeahead UI */ 
    $("#searchbox").typeahead({ 
    minLength: 3, 
    highlight: true, 
    hint: false 
    }, { 
    name: "CSJ 2014", 
    displayKey: "name", 
    source: ProjBH.ttAdapter(), 
    templates: { 
     header: "<h4 class='typeahead-header'>Projects</h4>", 
     suggestion: Handlebars.compile(["{{name}}"].join("")) 
    } 
    }); 

的jsfiddle這裏:http://jsfiddle.net/Monduiz/dzo5yg72/

編輯

我終於發現了問題。我錯過了一些html元素接收內容:

<table class="table table-hover" id="feature-list"> 
     <tbody class="list"></tbody> 
</table> 

回答

1

立即上載,你必須拋出 Uncaught Error: invalid dataset name: CSJ 2014一個JS錯誤。 這是因爲typeahead.js不允許name中的空格。 「 」只能由下劃線,破折號,字母(a-z)和數字組成。「 查看文檔https://github.com/twitter/typeahead.js/blob/master/doc/jquery_typeahead.md#datasets 你爲什麼不把它切換到CSJ_2014

+0

好點。我嘗試更改名稱,但沒有得到不同的結果。 – Monduiz

+0

你在這裏尋找的確切行爲是什麼?你的代碼在哪裏顯示/隱藏基於血跡查詢的地圖特徵? – snkashis

+0

我試圖做的是這樣的:用戶在搜索框中輸入文本以從標記圖層找到特定的項目,並在列表中顯示建議以點擊。我在jsfiddle上的例子試圖到達那裏。 – Monduiz

0

我終於找到了問題。我錯過了一些html元素來接收內容:

<table class="table table-hover" id="feature-list"> 
    <tbody class="list"></tbody> 
</table>