【发布时间】:2017-04-25 21:38:49
【问题描述】:
我想在ember中创建如下组件(templates/components/echo-hlabel-tf.hbs)
<div id="echo-hlabel-tf">
<span id="tf-label">{{label}}</span>
<span id="tf-value">
<input type="text" value={{textValue}}
{{action "validateRegExp" textValue regExp post on="focusOut"}}
{{action "showText" textValue post on="mouseUp"}}
/>
</span>
</div>
只是一个文本字段和一个标签放在同一行。我已经在组件的控制器中创建了函数(components/echo-hlabel-tf.js):
import Ember from 'ember';
export default Ember.Component.extend({
actions: {
validateRegExp(text,regExpStr){
let regExpObj = new RegExp(regExpStr)
if(regExpObj.test(text)){
console.log('entry matches')
}else{
console.log('entry is wrong');
}
},
showText(text){
console.log(text);
}
}
});
我想从另一个模板(模板/programmers.hbs)中使用这个组件:
<ul>
{{people-list title="List of programmers" people=model}}
</ul>
<div>
{{echo-hlabel-tf
label="Textfield horizontal"
textValue="..."
regExp="^([a-z0-9]{5})$"
}}
</div>
问题是,即使动作是在事件触发时触发的,表示输入值的变量 (textValue) 始终保持不变 ("...") 。似乎外部模板和组件之间的绑定是在开始时创建的,但是如果我在 textfield 中放置更多字母,则 textValue 的值保持不变并且不会改变。我想在向 textBox 添加字母时,使用控制台使用 showText 方法打印它们,但我总是打印“...”
【问题讨论】:
-
您的代码中有
on='focusOut'。您是否尝试过 keyDown/keyUp/keyPress,这会在每个键后更改值。 -
我下午去试试。提前致谢
标签: javascript ember.js