【问题标题】:How to determine if two properties are false inside one ember computed property?如何确定一个 ember 计算属性中的两个属性是否为假?
【发布时间】:2016-07-02 18:10:55
【问题描述】:

我有一个具有以下属性和计算属性的控制器。

import Ember from 'ember';

export default Ember.Controller.extend({
  emailAddress: '',
  messageBody: '',

  validEmail: Ember.computed.match('emailAddress', /^.+@.+\..+$/),
  validMessage: Ember.computed.gte('messageBody.length', 5),

  enableSend: Ember.computed.and('validEmail', 'validMessage'),
  disableSend: Ember.computed.not('enableSend')
});

此控制器与一个简单的表单相关联,该表单具有电子邮件输入字段和文本框。我想在启用提交按钮之前检查电子邮件输入和文本框是否有效。

上面的代码工作得很好,但是,似乎必须有一种方法来组合enableSenddisableSend中的逻辑

显然你不能在计算属性上链接方法,但这样的事情是有意义的:

Ember.computed.and.not('validEmail', 'validMessage')

这可能是一个愚蠢的问题,但我如何确定两个值是否为假而无需编写两个计算属性?

【问题讨论】:

    标签: ember.js computed-properties


    【解决方案1】:

    用手写的方式写出计算的属性:

    disableSend: Ember.computed('validEmail', 'validMessage', function() {
      return this.get('validEmail') && this.get('validMessage');
    })
    

    【讨论】:

      【解决方案2】:

      这是 JS 代码的重构版本:

      emailAddress: '',
      messageBody: '',
      
      validEmail: Ember.computed.match('emailAddress', /^.+@.+\..+$/),
      validMessage: Ember.computed.gte('messageBody.length', 5),
      
      //Return the opposite to make "disabled" false
      isDisabled: Ember.computed('messageIsValid','emailIsValid', function(){
        return !(this.get('messageIsValid') && this.get('emailIsValid'));
      })
      

      在 hbs 文件中你需要这样的东西:

        <button disabled={{isDisabled}}>Send message</button>
      

      【讨论】:

        猜你喜欢
        • 2016-07-11
        • 1970-01-01
        • 2023-04-03
        • 2015-09-20
        • 1970-01-01
        • 2019-10-26
        • 2014-06-18
        • 1970-01-01
        • 2016-05-17
        相关资源
        最近更新 更多