首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >手动创建计算属性

手动创建计算属性
EN

Stack Overflow用户
提问于 2014-04-29 09:40:59
回答 2查看 130关注 0票数 0

这就是问题所在。我目前正在创建一个混合器来处理表单验证。问题是,我想在init方法中创建一个计算属性isFormValid,它是'computed.and'属性的'is<fieldName>Valid'其他属性。

我可以创建它,但它永远不会更新。我想我需要增加观察员,但也许有人会有一个更好的解决方案?

编辑

这里有一些澄清。

我的控制器得到了这个属性:

代码语言:javascript
复制
App.FormViewController = Ember.Controller.extend(App.ValidatorMixin, {
    validations: {
        field1: {
            errLvl: App.Validation.ErrLvl.ERROR,
            type: App.Validation.Type.TEXT,
            pattern: /^\d{6}$/,
            message: 'Error message'
        },
        field2: {
            //somecode
        }
    }
});

混合器的定义如下:

代码语言:javascript
复制
App.ValidatorMixin = Ember.Mixin.create({
    init: function() {
        this._super();

        var self = this;
        Ember.keys(this.validations).forEach(function(prop) {
            self.set('is' + prop.capitalize() + 'Valid', false); //Is changed when the field is valid
        });
    }
});

isFormValid属性应该是所有这些is<fieldName>ValidEmber.computed.and

EDIT2

表单上的每个输入都是由输入助手和这个混合器定义的:

代码语言:javascript
复制
App.Mixin.ValidatableInput = Ember.Mixin.create({
    focusOut: function() {
        this.validate();
    },
    //Do the validation
    validate: function() {
        //I'm currently moving that part to the controller because it's part
        //of the logic but it was easier for a start to write it here

        //We update the is<fieldName>Valid property
        this.get('parentView.controller').set('is' + this.get('name').capitalize() + 'Valid', !hasError);

        //Then some DOM manipulation to attach the error message
    }
});

最后我的观点是这样的

代码语言:javascript
复制
{{view App.CustomTextField name="field1" value=field1}}
{{view view.buttonCreate disabled=isFormInvalid}}
EN

回答 2

Stack Overflow用户

发布于 2014-04-29 10:04:17

init方法中,可以使用defineProperty设置计算属性。

代码语言:javascript
复制
Ember.defineProperty(myObject, 'myProperty', Ember.computed(function computed() {

    return 'myValue';

}).property('myObserver'));
票数 0
EN

Stack Overflow用户

发布于 2014-04-29 15:43:18

这对你有用吗?(扩展@Wild蜂蜜,我不能评论)。如果有以下几个属性,则可以指定多个属性:

代码语言:javascript
复制
Ember.defineProperty(myObject, 'myProperty', Ember.computed(function computed() {

    return 'myValue';

}).property('myObserver.@each.myObservedProperty'));

我有幸在Ember中使用jQuery验证,触发表单视图在didInsertElement上的.validate()调用和规则,然后当您将焦点放在每个Ember.TextField上时,进行.valid()检查。我强烈推荐它用于表单验证。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23361010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档