我正在尝试创建一个通用函数来启用typeahead标记查找。在我尝试推广这个功能之前,我已经取得了一些成功。现在它似乎工作但更新错误的字段。
我认为创建var tmApi
的行不会保持本地化。或者至少回调是访问错误的变量。并想知道如何让回调引用本地回调?
由于
<div class="tag-container" id="skills-container"></div>
<input class="form-control" id="skills-add" type="text"
data-tag="skills" data-prefill="${traveler.skills}" data-tagfile="/inc/ajax/skills.json">
<input type="hidden" id="skills" name="skills">
<script>setupTags();</script>
和
function setupTags(){
var fields = $('INPUT[type="text"]');
for (var i=0; i<fields.length; i++){
if (fields[i].getAttribute("data-tag")){
var tag = fields[i].getAttribute("data-tag");
var prefill = fields[i].getAttribute("data-prefill");
var tagfile = fields[i].getAttribute("data-tagfile");
console.log(tag);
var tmApi = $('#'+tag+'-add').tagsManager({
backspace: [],
tagsContainer: '#'+tag+'-container',
delimiters: [9, 13, 44], // tab, enter, comma
prefilled: prefill,
output: '#'+tag
});
console.log(tmApi);
var tagsdb = new Bloodhound({
datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.name); },
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: {
url: tagfile,
cacheKey: tag,
ttl: 600000, //10 min
filter: function(list) {
return $.map(list, function(tag) { return { name: tag }; });
}
}
});
tagsdb.initialize();
$('#'+tag+'-add').typeahead(null, {
name: tag,
displayKey: 'name',
source: tagsdb.ttAdapter()
}).on('typeahead:selected', function (e, d, s) {
tmApi.tagsManager("pushTag", d.name);
});
}
}
}
答案 0 :(得分:0)
通过封装在Closure中来解决它