Есть ли шанс, что вы могли бы реорганизовать код для использования нативного <input>
вместо односторонней привязки?Вот twiddle , который показывает вам, что я имею в виду.
<input value={{inputValue}} oninput={{action (mut inputValue) value="target.value"}} placeholder={{translate "placeholder"}} />
, где translate
- помощник:
const translations = {
placeholder: "Type here"
};
export function translate(params/*, hash*/) {
return translations[params] || `${params}_NOT_FOUND`;
}
export default Ember.Helper.helper(translate);
Вы можете безопасно переключиться наnative <input>
, если вы> = Ember 2.3.1.
Если вы меньше этого (это единственный раз, когда я рекомендую делать то, что я предлагаю здесь, вместо одностороннего связывания),вы можете предоставить свою собственную обертку для компонента без тегов {{input}}
, которая принимает ключ для заполнителя и выполняет перевод через вычисленные свойства.См. этот твидл для примера.
Ваш ввод становится:
{{translated-placeholder-input value=value placeholderKey="placeholder"}}
, где translated-placeholder
является компонентом без тегов:
import Ember from 'ember';
const translations = {
placeholder: "Type here..."
};
export default Ember.Component.extend({
//creates the component without an enclosing div
tagName: "",
translatedPlaceholder: Ember.computed('placeholderKey', function(){
let key = this.get('placeholderKey');
if(!key){
return "";
}
return translations[key] || `${key}_NOT_FOUND`;
})
});
это просто переход к input
{{input value=value placeholder=translatedPlaceholder}}
Недостатком этого подхода (помимо всего, что идет с двухсторонней привязкой) является необходимость явно передавать любой атрибут, связанный с компонентом, в {{input}}