как установить теги начальной загрузки, входной источник данных с опережающим типом как ko observablearray

<input data-bind="value:ServicingSelected" class='t1' type='text'
 name='tags' data-role='tagsinput' placeholder='Add tags' />

Здесь ServicingSelected - наблюдаемый массив, который содержит текущий выбранный элемент при просмотре записи.

$(document).ajaxComplete(function () {
           $('.t1').tagsinput({
               maxTags: 3
           });
       });

Теперь он правильно отображает выбранные параметры в записи просмотра. Но исходный код Typahead для того же самого был сохранен в аналогичном поле наблюдения в модели представления.

Но не знаю, как установить его в качестве источника данных для ввода впереди ввода тегов начальной загрузки.

Я использовал ссылку ниже для исх. http://timchlechter.github.io/bootstrap-tagsinput/examples/.

Поле ввода тегов находится внутри таблицы

 <table style="width: 100%" class="table table-striped" 
   data-bind="triggerUpdate: MatchDetails">


person user3122606    schedule 20.01.2015    source источник


Ответы (1)


Во входных документах тегов автор использует предварительную выборку и удаленный json:

var citynames = new Bloodhound({
  datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
  queryTokenizer: Bloodhound.tokenizers.whitespace,
  prefetch: {
    url: 'assets/citynames.json',
    filter: function(list) {
      return $.map(list, function(cityname) {
        return { name: cityname }; });
    }
  }
});
citynames.initialize();

$('input').tagsinput({
  typeaheadjs: {
    name: 'citynames',
    displayKey: 'name',
    valueKey: 'name',
    source: citynames.ttAdapter()
  }
});

Но в typeahead.js docs мы видим доступный параметр local:

// constructs the suggestion engine
var states = new Bloodhound({
  datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
  queryTokenizer: Bloodhound.tokenizers.whitespace,
  // `states` is an array of state names defined in "The Basics"
  local: $.map(states, function(state) { return { value: state }; })
});

// kicks off the loading/processing of `local` and `prefetch`
states.initialize();

$('#bloodhound .typeahead').typeahead({
  hint: true,
  highlight: true,
  minLength: 1
},
{
  name: 'states',
  displayKey: 'value',
  // `ttAdapter` wraps the suggestion engine in an adapter that
  // is compatible with the typeahead jQuery plugin
  source: states.ttAdapter()
});

Так что вы, вероятно, можете использовать

local: myObservableArray().map(function(tag) { return { value: tag }; })

Однако, если вам нужно, чтобы typeahead обновлялся всякий раз, когда это делает observableArray, вам, вероятно, придется повторно подключить все, снова инициализировав плагин.

Это можно сделать с помощью subscription: http://knockoutjs.com/documentation/observables.html#explicitly-subscribing-to-observables

myObservableArray.subscribe(function() {
    setupTypeahead();
});
person Guilherme Rodrigues    schedule 20.01.2015
comment
Спасибо, у меня это сработало, используя сам локальный параметр, но мне пришлось преобразовать наблюдаемый массив в нормальный массив, как показано в stackoverflow.com/questions/25292267/ - person user3122606; 26.01.2015