1

这是我的数据:

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选择我的标记对象的语法不正确。我应该改用什么?

4

3 回答 3

0

您可以尝试以某种方式序列化对象。在我的示例(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选项。所有这一切都太过分了,因为你可能不需要它。

于 2012-06-27T00:09:42.627 回答
0

我用过这个:

names = []; 
for (var k in markers) {
    if (markers.hasOwnProperty(k)) {
        names.push(k);
    }
}
于 2012-06-27T00:26:32.950 回答
0

我就此事写了一篇博文,How to use rich objects and typed objects with Bootstrap Typeahead。关键是将您的对象键入到具有toString()序列化fromString()方法和反序列化方法的某个类(用于在 Bootstrap Typeaheadupdater函数中引用原始类型的对象)。在我的博客中,我使用UsState了一个例子:

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

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

然后在 Typeahead 定义中updater

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

请注意其他 Typeahead 方法的定义以正确处理您的对象:

highlighter: function(state) {
    return $.fn.typeahead.Constructor.prototype.highlighter.call(this, state.name);
},
于 2013-06-21T14:52:13.150 回答