【问题标题】:EmberJS: Computed property with get/set rendered in templateEmberJS:在模板中呈现 get/set 的计算属性
【发布时间】:2017-09-01 16:49:53
【问题描述】:

这是我的代码的简化版本,但它仍然说明了我遇到的问题。我正在尝试将计算的属性值与 textValue 绑定。

请注意,我知道我可以按照fiddle 中的说明进行基本操作,但这不能满足我的需求。

在这段代码的大版本中,这里没有说明,我在设置之前对value进行了修改,在获取之后对text进行了修改。这就是为什么我不能只使用上面小提琴中所示的默认绑定的要点。

JS

var App = Ember.Application.create();

App.ApplicationController = Ember.Controller.extend({
    text: "Default",
    textValue: function(key, value) {
        if(arguments.length === 1) {
            return this.get('text');
        } else {
            this.set('text', value);
        }
    }.property('text')
});

HTML

<script type="text/x-handlebars" data-template-name="application">
    {{input value=textValue}}
    <br>   
    TextValue: {{textValue}}
</script>

Fiddle

提前致谢!

【问题讨论】:

    标签: javascript ember.js


    【解决方案1】:

    从 Ember.js 1.12 开始,不推荐检查参数长度,因为已采用计算属性的离散 setter/getter。

    textValue: Ember.computed('text',  {
        get() {
          return this.get('text');
        },
        set(value) {
          this.set('text', value);
        }
      })
    

    【讨论】:

    • 嗨,我认为这个合成器有问题。以下对我有用: textValue: Ember.computed('text', { get: function() { return this.get('text'); }, set: function(key, value, rawValue) { this.set( '文本', 值); } })
    • Ember 使用 ES6 转译器;因此function 关键字不是强制性的。 Example here
    • 嗯...当然,但这仍然不是有效的语法。去掉冒号,如果你想做函数成员的简写,请添加 prens。应该是get() {return this.get('text')},
    【解决方案2】:

    需要为您的计算属性返回一个值

    http://jsfiddle.net/EW7xD/2/

    js

    App.ApplicationController = Ember.Controller.extend({
        text: "Default",
        textValue: function(key, value) {
            if(arguments.length === 1) {
                return this.get('text');
            } else {
                this.set('text', value);
                return this.get('text');
            }
        }.property('text')
    });
    

    或者简化一下

    App.ApplicationController = Ember.Controller.extend({
        text: "Default",
        textValue: function(key, value) {
            if(arguments.length > 1) {
                this.set('text', value);
            } 
            return this.get('text');
        }.property('text')
    });
    

    【讨论】:

    • 漫长的一天又来了!不敢相信我错过了。谢谢。