기본적으로 twitter typeahead.js는 문자열의 시작 부분과 일치하는 요소 만 반환합니다. 예를 들면 다음과 같습니다.
출처 : [ 'type', 'typeahead', 'ahead']
쿼리 : '유형'
반환 : 'type'및 'typeahead'
-
검색어 : '앞서'
반환 : 'ahead'
'ahead'및 'typeahead'를 반환하고 싶습니다.
내 코드 :
var clients = new Bloodhound({
datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.value); },
queryTokenizer: Bloodhound.tokenizers.whitespace,
limit: 10,
prefetch: {
url: '/clients.json',
filter: function(list) {
return $.map(list, function(value) { return { name: value }; });
}
}
});
clients.initialize();
$('.client').typeahead(null, {
displayKey: 'value',
source: clients.ttAdapter(),
minLength: 1,
});
이미 질문이 있지만 대답을 이해하지 못했습니다.
해결책을 찾았습니다 ... 문제는 제가 부트 스트랩 2 자동 완성 기능에 너무 익숙해서 그 datumTokenizer
일을 이해하지 못했다는 것입니다. 다른 사람이 이해하기 어렵다면 아래에 약간의 설명을 추가하겠습니다.
queryTokenizer : 쿼리중인 단어 배열, 'test abcd'를 쿼리하면 문자열을 [ 'test', 'abcd']로 변환하고이 두 단어와 일치하는 항목을 찾습니다.
datumTokenizer : queryTokenizer와 일치시킬 단어 배열입니다. JSON의 각 항목에는 일치시킬 단어 세트가 있습니다.
따라서 출처가있는 경우 :
[ '좋은 테스트', '나쁜 테스트']
'est'를 쿼리합니다. datumTokenizer가 다음과 같이 'est'를 포함하는 배열을 반환하도록해야합니다.
첫 번째 항목의 경우 [ 'good', 'test', 'ood', 'od', 'test', 'est', 'st']
두 번째 항목의 경우 [ 'bad', 'ad', 'test', 'est', 'st']
Bellow는 제가 작성한 코드입니다. 최적의 코드인지는 모르겠지만 어쨌든 도움이 될 것 같습니다.
new Bloodhound({
datumTokenizer: function(d) {
var test = Bloodhound.tokenizers.whitespace(d.value);
$.each(test,function(k,v){
i = 0;
while( (i+1) < v.length ){
test.push(v.substr(i,v.length));
i++;
}
})
return test;
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
limit: 10,
prefetch: {
url: '/lista.json',
ttl: 10000
}
});
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다