2012-06-26 92 views
1

這是我的數據:如何引用bootstrap-typeahead的數據?

var markers = { 
     "example": {"lat": -83.68088192646843, "lng": -125.270751953125, "type": "town"}, 
     "anotherexample": {"lat": -58.1548020417031, "lng": -21.318115234375, "type": "town"} 
} 

我如何引用數據的這個來源?

編輯:

的方法是這樣的:

$('.thing').typeahead({source: markers});

但是,這並不工作,我認爲這是因爲markers是不正確的語法來選擇我的標記對象。我應該用什麼來代替?

+0

_reference_是什麼意思?你需要更加明確。你想要得到什麼結果? – Sherbrow

+0

@sherbrow檢查我的編輯 – Harry

回答

0

我用這個:

names = []; 
for (var k in markers) { 
    if (markers.hasOwnProperty(k)) { 
     names.push(k); 
    } 
} 
0

您可以嘗試以某種方式序列化對象。 在我example (jsfiddle)我串接每個條目,以獲得一定的字符串:

var markers_as_str = Array(); 
for(var index in markers) { 
    var marker = markers[index]; 
    var str = index+" : "+marker.lat+" "+marker.lng+" "+marker.type; 
    markers_as_str.push(str); 
} 

$('#strs').typeahead({ 
    source: markers_as_str 
}); 

您可以定製matchersorter選項,以查看特定的屬性。但是,您在顯示選項時會遇到困難,因此您必須覆蓋updater選項。所有這些都會有點過頭,因爲你可能不需要它。

+0

我剛剛想出了一種更簡潔的方式將其轉換爲數組。雖然鍵入仍然無法使用。我要做一個小提琴來測試。 – Harry

0

我寫了一篇博客對此事,How to use rich objects and typed objects with Bootstrap Typeahead。關鍵是將您的對象輸入到某個類中,該類具有用於序列化的方法toString()和用於反序列化的方法(用於引導類型前導updater函數以引用原始類型的對象)。在我的博客,我用UsState爲例:

UsState.prototype.toString = function() { 
    return JSON.stringify(this); 
}; 

UsState.fromString = function(serializedState) { 
    return $.extend(new UsState(), JSON.parse(serializedState)); 
}; 

然後在事先鍵入的內容定義爲updater

updater: function(state) { 
    state = UsState.fromString(state); 
    $stateMessage.html('<strong>' + state.name + '</strong> has ' + state.numElectoralVotes + ' electoral votes.'); 
    return state.name; 
}, 

注意的其他事先鍵入的內容定義方法妥善處理您的對象:

highlighter: function(state) { 
    return $.fn.typeahead.Constructor.prototype.highlighter.call(this, state.name); 
}, 
相關問題