문제

난 그냥 블러드 하운드를 사용하여 전환했다.그리고 그것은 매우 간단합니다.녹아웃과 함께.나는 몇 가지 문제가 있습니다 -

  1. 입력 헤드가 표시되지 않습니다. Name 제안 목록의 속성
  2. 에 대한 쿼리로 세트를 업데이트하는 방법을 알 수 없습니다

http://jsfiddle.net/Ea93f/2/

나는 지금 새로운 데이터를'정적으로'추가하고 있지만 여전히 결과 집합에 표시되어야하며 그렇지 않습니다

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();
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top