我正在尝试验证email
地址,并相应地启用或禁用操作按钮。但它不起作用。我是emberjs
的新手,请帮助我吗? Here is my Tutorial
html代码(hbs):
<div class="jumbotron text-center">
<h1>Coming Soon</h1>
<br/><br/>
<p>Don't miss our launch date, request an invitation now.</p>
<div class="form-horizontal form-group form-group-lg row">
<div class="col-xs-10 col-xs-offset-1 col-sm-6 col-sm-offset-1 col-md-5 col-md-offset-2">
<input type="email" value=emailAddress class="form-control" placeholder="Please type your e-mail address." autofocus="autofocus"/>
</div>
<div class="col-xs-10 col-xs-offset-1 col-sm-offset-0 col-sm-4 col-md-3">
<button class="btn btn-primary btn-lg btn-block" disabled={{isDisabled}} {{action 'saveInvitation'}}>Request invitation</button>
</div>
</div>
<br/><br/>
</div>
控制器js:
import Ember from 'ember';
export default Ember.Controller.extend({
emailAddress:'',
isValid: Ember.computed.match('emailAddress', /^.+@.+\..+$/),
isDisabled: Ember.computed.not('isValid'),
actualEmailAddress: Ember.computed('emailAddress', function() {
console.log('actualEmailAddress function is called: ', this.get('emailAddress'));
}),
emailAddressChanged: Ember.observer('emailAddress', function() {
console.log('observer is called', this.get('emailAddress'));
}),
actions: {
saveInvitation() {
alert(`Saving of the following email address is in progress: ${this.get('emailAddress')}`);
this.set('responseMessage', `Thank you! We've just saved your email address: ${this.get('emailAddress')}`);
this.set('emailAddress', '');
}
}
});
当我输入有效的电子邮件时,按钮不启用!! 提前谢谢。
更新
在浏览器中我收到此错误:
DEPRECATION: Usage of `router` is deprecated, use `_routerMicrolib` instead.
答案 0 :(得分:1)
您的案例的主要问题是您使用的是纯html5输入,该输入未绑定到控制器的emailAddress
属性;即使你输入输入也是如此; emailAddress
的价值不会改变;这意味着不会重新计算取决于emailAddress
(isValid
,isDisabled
)的计算属性。
你应该怎么做?您可以使用执行双向绑定的ember输入帮助程序,并使所有内容按预期工作。请参阅以下twiddle,其中同时显示了html5输入和ember的input
帮助器({{input value=emailAddress ..}}
)。
为您提供的一些注意事项:如果您坚持使用html输入,那么您需要将内容包装到花括号中的控制器({{}}
)。例如; <input value={{emailAddress}}/>
将以单向方式将emailAddress
字段的值绑定到输入。如果使用纯html5输入,则需要处理change
输入事件以自行反映emailAddress
属性的值;但是input
ember的助手已经进行了双向绑定,这对于ember starters来说已经足够了。
另一个注意事项是;我见过你定义了actualEmailAddress
计算属性;但它永远不会运行!原因是;如果未使用计算属性,则它们将不会运行(即它们未绑定到模板);他们很聪明!
我没有仔细阅读教程;但我建议从头到尾完成它,以获得了解正在发生的事情的线索。顺便说说;我对你收到的弃用警告了解不多;但我可以保证它与您面临的问题无关。