Ember无法通过验证电子邮件启用/禁用

时间:2017-06-29 11:34:49

标签: javascript ember.js

我正在尝试验证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.

1 个答案:

答案 0 :(得分:1)

您的案例的主要问题是您使用的是纯html5输入,该输入未绑定到控制器的emailAddress属性;即使你输入输入也是如此; emailAddress的价值不会改变;这意味着不会重新计算取决于emailAddressisValidisDisabled)的计算属性。

你应该怎么做?您可以使用执行双向绑定的ember输入帮助程序,并使所有内容按预期工作。请参阅以下twiddle,其中同时显示了html5输入和ember的input帮助器({{input value=emailAddress ..}})。

为您提供的一些注意事项:如果您坚持使用html输入,那么您需要将内容包装到花括号中的控制器({{}})。例如; <input value={{emailAddress}}/>将以单向方式将emailAddress字段的值绑定到输入。如果使用纯html5输入,则需要处理change输入事件以自行反映emailAddress属性的值;但是input ember的助手已经进行了双向绑定,这对于ember starters来说已经足够了。

另一个注意事项是;我见过你定义了actualEmailAddress计算属性;但它永远不会运行!原因是;如果未使用计算属性,则它们将不会运行(即它们未绑定到模板);他们很聪明!

我没有仔细阅读教程;但我建议从头到尾完成它,以获得了解正在发生的事情的线索。顺便说说;我对你收到的弃用警告了解不多;但我可以保证它与您面临的问题无关。