Вопрос

Я только что преобразовал в использование bloodhound.js и typeaphead.js с нокаутом.У меня есть несколько вопросов -

  1. The PypeAhead не отображает свойство Name в списке предложений
  2. Я не могу понять, как обновить набор для запроса против
  3. http://jsfiddle.net/ea93f/2/

    Я «статически» добавляю новые данные прямо сейчас, но он все равно должен отображаться в наборе результатов, а не

    self.addNew = function () {
        self.someOptions.push(new Option(self.someOptions().length + 1, 'Johnnn'));
    }
    
    .

    Я за каких-либо предложений, которые работают, поэтому я не застрял, используя Bloodhound.js, если это не требуется, но из-за природы моего приложения я не могу удалить свойства как наблюдаемые, но вызов ko.tojsкакой-то точка определенно вариант.

Это было полезно?

Решение

Первый вопрос с дисплеем.Вам нужно предоставить явную функцию в вашем привязке

HTML

<input type="text" data-bind="typeahead: { name: 'something', taOptions: theseOptions, displayKey: 'Name' }, value: thisValue" />
.

JavaScript

    // In ko.bindingHandlers.typeahead.init function
    var displayKey = options.displayKey;
    options.displayKey = function(item) {
        return item[displayKey]();
    };
.

Вторая проблема с использованием локального.Похоже, система не пересчитывает источник после инициализации.Глядя на документы, которые вам, вероятно, нужно использовать удаленный вариант и притворяться Ajax Project / Resald.Вам также необходимо реализовать свой собственный фильтр результатов, а также взлом вокруг запросов на запрос, когда параметры обновляются.

Я обновил ваш jsfiddle со следующим ...

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