Как получить значение из автозаполнения YUI? - PullRequest
1 голос
/ 28 января 2011

Я в растерянности из-за того, как сделать что-то чрезвычайно простое: получить текущее значение автозаполнения виджета YUI3 У меня есть следующая разметка:

<label for="targets">Target:</label>
<input id="targets" type="text"></input>
<label for="packets">Packet:</label>
<input id="packets"></input>

У меня есть следующий Javascript:

YUI().use("autocomplete", function(Y) {
  Y.one('body').addClass('yui3-skin-sam');
  var tgt = new Y.AutoComplete({
    inputNode: '#targets',
    source: '/telemetry/targets?target={query}',
    render: true
  })
  var pkt = new Y.AutoComplete({
    inputNode: '#packets',
    source: '/telemetry/packets?target='+tgt.get('value')+',packet={query}',
    render: true
  })
});

tgt.get ('value') всегда возвращает пустую строку, независимо от того, что я ввел во ввод #targets. Что я делаю не так?

1 Ответ

4 голосов
/ 28 января 2011

tgt.get('value') - это правильный способ получить текущее значение inputNode, но в этом случае он вызывается немедленно, когда значение атрибута источника установлено при создании экземпляра, а не когда запрос выполняется позже.Поскольку в этот момент текст не был введен, значение будет пустым.

Если вы хотите, чтобы для параметра "target" второго экземпляра AutoComplete было установлено текущее значение inputNode первого экземпляра AutoComplete, лучшимнеобходимо установить пользовательский шаблон запроса для экземпляра pkt:

var pkt = new Y.AutoComplete({
  inputNode: '#packets',
  source: '/telemetry/packets',
  requestTemplate: function () {
    return '?query=' + encodeURIComponent(pkt.get('query')) +
        '&target=' + encodeURIComponent(tgt.get('value'));
  },
  render: true
});

. Это обеспечит создание строки запроса каждого запроса во время запроса, а не во время его создания.

...