简体   繁体   English

Emberjs:数字输入之间的双向数据绑定

[英]Emberjs: Two-Way Data-binding between Number Inputs

I am looking at data binding in Ember, and I want to bind two input type="number" elements so that changing either of the elements will update the other element. 我正在寻找Ember中的数据绑定,我想绑定两个input type="number"元素,以便更改任何一个元素将更新另一个元素。 Here is the JSBin . 这是JSBin

What I would like to have is the following: 我想要的是以下内容:

Biker = DS.Model.extend(
    bikes: (->
        @get("tires") / 2
    ).property("tires")
    tires: (->
        @get("bikes") * 2
    ).property("bikes")
)

But that will result in the following stack overflow: 但这会导致以下堆栈溢出:

Uncaught RangeError: Maximum call stack size exceeded ember.js:1 Ember.assert ember.js:1 get ember.js:2167 Ember.Observable.Ember.Mixin.create.get ember.js:12425 (anonymous function) biker.js:32 ComputedPropertyPrototype.get ember.js:4951 get ember.js:2176 Ember.Observable.Ember.Mixin.create.get ember.js:12425 (anonymous function) biker.js:29 ComputedPropertyPrototype.get 未捕获RangeError:最大调用堆栈大小超出ember.js:1 Ember.assert ember.js:1 get ember.js:2167 Ember.Observable.Ember.Mixin.create.get ember.js:12425(匿名函数)biker.js :32 ComputedPropertyPrototype.get ember.js:4951 get ember.js:2176 Ember.Observable.Ember.Mixin.create.get ember.js:12425(匿名函数)biker.js:29 ComputedPropertyPrototype.get

What is the best way to achieve 2-way absolute data-binding with input elements? 使用input元素实现双向绝对数据绑定的最佳方法是什么?

Note: I asked something similar, but about angular . 注意: 我问过类似的东西,但是有点角度

Instead of writing circular code, have just one of the properties watch the other. 而不是编写循环代码,只有一个属性观看另一个。 Ember's computed properties allow you to define setter and getter functions for this exact purpose: Ember的计算属性允许您为此目的定义setter和getter函数:

App.Biker = DS.Model.extend({
  bikes: DS.attr('number'),
  tires: function(key, value) {
    // Setter
    // Says: if we did this.set('tires', something);
    if (arguments.length > 1) {
      var bikes = value != 0 ? value / 2 : 0; // Incase zero bikes
      this.set('bikes',  bikes);
    }

    // Getter
    return this.get('bikes') * 2;
  }.property('bikes')
})

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM