Как заставить dijit / form / TextBox немедленно обновить связанную с ним переменную - привязка не работает должным образом - PullRequest
0 голосов
/ 30 июня 2018

У меня есть

<input id="myTextBox" data-dojo-type="dijit/form/TextBox" data-dojo-props="value: at(model, myValue)" />

Когда я пытаюсь скопировать значение из model.myValue в другое input (например,

window.setInterval(
  function() { document.getElementById("theOtherInput").value = model.myValue; }, 1000); 

Я заметил, что значение myTextBox не синхронизируется с model.myValue до тех пор, пока <input> из myTextBox не потеряет фокус. То есть - theOtherInput не будет обновляться, пока я не покину поле ввода myTextBox.

Как заставить dojo синхронизировать ввод с привязанной переменной при каждом нажатии клавиши? Я думал, что это должно было быть поведением по умолчанию или, по крайней мере, это должно быть возможно без особых усилий, но я не нашел подходящего атрибута для этого. Есть идеи?

Основная проблема для меня заключается в том, что когда я отправляю форму клавишей ввода, model.myValue имеет значение до того, как ввод myTextBox получил фокус. (и я не хочу взломать с setInterval - я просто хочу, чтобы dojo выполнял свою работу по синхронизации ввода с моделью)

1 Ответ

0 голосов
/ 04 июля 2018

Самое близкое, что вы можете получить, это установить свойство intermediateChanges в true и прикрепить событие onChange. Примерно так:

<input id="myTextBox" data-dojo-type="dijit/form/TextBox" 
       data-dojo-props="intermediateChanges: true"
       data-dojo-attach-event="onChange: _myOnChange"
       data-dojo-props="value: at(model, myValue)" />

Теперь внутри вашего виджета функция _myOnChange будет запускаться при каждом полезном нажатии клавиши или при изменении содержимого.

_myOnChange: function(newValue){
  console.log(newValue);
  document.getElementById("theOtherInput").value = newValue;
}
...