녹아웃을 사용하여 유형머리.제스와 블러드하운드0.10
-
21-12-2019 - |
문제
난 그냥 블러드 하운드를 사용하여 전환했다.그리고 그것은 매우 간단합니다.녹아웃과 함께.나는 몇 가지 문제가 있습니다 -
- 입력 헤드가 표시되지 않습니다.
Name
제안 목록의 속성 - 에 대한 쿼리로 세트를 업데이트하는 방법을 알 수 없습니다
나는 지금 새로운 데이터를'정적으로'추가하고 있지만 여전히 결과 집합에 표시되어야하며 그렇지 않습니다
self.addNew = function () {
self.someOptions.push(new Option(self.someOptions().length + 1, 'Johnnn'));
}
나는 작동 어떤 제안을 위해입니다,그래서 나는 블러드 하운드를 사용하여 붙어 있지 않다.***********어떤 시점에서 토즈는 확실히 옵션입니다.
해결책
첫 번째 문제는 디스플레이키입니다.바인딩에 명시적 함수를 제공해야 합니다
2015 년
<input type="text" data-bind="typeahead: { name: 'something', taOptions: theseOptions, displayKey: 'Name' }, value: thisValue" />
자바스크립트
// In ko.bindingHandlers.typeahead.init function
var displayKey = options.displayKey;
options.displayKey = function(item) {
return item[displayKey]();
};
두 번째 문제는 지역 사용입니다.초기화 후 시스템이 소스를 다시 계산하지 않는 것 같습니다.문서를 보면 당신은 아마 원격 옵션을 사용하고 아약스 요청/응답 척해야합니다.또한 자신의 결과 필터를 구현할 뿐만 아니라 옵션이 업데이트될 때 요청 캐시를 해킹해야 합니다.
나는 당신을 업데이트했습니다 제스피들 다음과 함께...
self.theseOptions = new Bloodhound({
datumTokenizer: function(d) {
var seomth = Bloodhound.tokenizers.whitespace(d.Name());
console.log(seomth);
return seomth },
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote : {
url : '%QUERY',
transport : function(url, options, onSuccess, onError) {
var deferred = $.Deferred();
deferred.done( function() { onSuccess(this); });
var filterVal = url.toLowerCase();
var result = self.someOptions().filter( function(item) {
return !!~item.Name().toLowerCase().indexOf(filterVal);
});
deferred.resolveWith( result );
return deferred.promise();
}
}
//local: self.someOptions()
});
self.addNew = function () {
self.someOptions.push(new Option(self.someOptions().length + 1, 'Johnnn'));
self.theseOptions.transport.constructor.resetCache();
}
제휴하지 않습니다 StackOverflow