Почему Ractive не фиксирует каждую клавишу, нажатую при вводе в MacOS в InDesign?

У меня есть html-ввод, который я двусторонне привязал к Ractive:

<input type="password" value="{{password}}">

«пароль» здесь — двустороннее связанное значение в моем Ractive. Затем у меня есть вычисленное значение, использующее его:

computed : {
    validPassword : function() {
        return $.trim(this.get("password")).length > 0; 
    },
},

Это вычисленное значение используется для (де)активации кнопки:

<div
    {{#if validPassword}}
    <button type="button" on-click="connect">connect</button>
    {{else}}
    <button type="button" disabled="disabled">connect</button>
    {{/if}}
</div>

Когда я что-то набираю на входе, кажется, что значение validPassword не пересчитывается Ractive. Но забавно, когда я удаляю символ из ввода, значение пересчитывается и состояние кнопки обновляется.

Я пропустил что-то в конфигурации Ractive, что могло бы заставить его пересчитывать вычисленное значение при каждом нажатии клавиши (любой наблюдатель?)?

PS: эта проблема возникает только в Mac OS (10.9). Это отлично работает в Windows.


person Rémi Doolaeghe    schedule 09.12.2014    source источник
comment
В каких браузерах вы пробовали? такое же поведение в Chrome/Safari?   -  person Riduidel    schedule 09.12.2014
comment
Это немного особенное. Я протестировал его во встроенном движке хрома v8 в Adobe InDesign и обнаружил эту проблему. Параллельно я только что протестировал его в firefox, chrome и safari, и он отлично работает. Может быть, ошибка в хромовом движке InDesign?   -  person Rémi Doolaeghe    schedule 09.12.2014
comment
Похоже на ошибку в InDesign (возможно, очень старый Chromium). Возможным обходным путем может быть прослушивание событий DOM и обновление значения вручную, а не двусторонняя привязка: jsfiddle .net/rich_harris/4vo9y9vp   -  person Rich Harris    schedule 09.12.2014
comment
@RichHarris Это имеет смысл и отлично работает. Только вопрос: откуда атрибут on-keydown-input-change? Я не видел его ни в спецификации HTML, ни в спецификации Ractive.   -  person Rémi Doolaeghe    schedule 10.12.2014
comment
В Ractive вы можете создать директиву on-[event], которая настраивает прослушивание событий на узле. on-keydown-input-change='...' это просто сокращение от on-keydown='...' on-input='...' on-change='...'   -  person Rich Harris    schedule 10.12.2014


Ответы (1)


Это должно быть действительно ошибка во встроенном хроме InDesign.

В любом случае, как предложил Рич Харрис, работающим решением является следующий обходной путь, предложенный в предложенном jsfiddle с основная строка:

<input type="password" value="{{password}}" on-keydown-input-change='set("password",event.node.value)'>

Механизм InDesign в Mac OS, похоже, не понимает использование атрибута value в теге input для двусторонней привязки. Вы должны использовать атрибут on-keydown-input-change и вручную установить значение в Ractive для привязки значения из HTML к JS.

РЕДАКТИРОВАТЬ: вы даже можете использовать простой атрибут ввода при нажатии клавиши (удалить изменение). Это помогает.

person Rémi Doolaeghe    schedule 10.12.2014