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

时间:2014-07-09 17:05:10

标签: javascript ember.js ember-data

我正在查看Ember中的数据绑定,我想绑定两个input type="number"元素,以便更改任何一个元素将更新另一个元素。 Here is the JSBin

我想要的是以下内容:

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

但是这会导致以下堆栈溢出:

  

Uncaught RangeError:最大调用堆栈大小超过了ember.js:1   Ember.assert ember.js:1得到ember.js:2167   Ember.Observable.Ember.Mixin.create.get ember.js:12425(匿名   function)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

使用input元素实现双向绝对数据绑定的最佳方法是什么?

注意:I asked something similar, but about angular

1 个答案:

答案 0 :(得分:3)

不是编写循环代码,而是只有一个属性可以监视另一个。 Ember's computed properties允许您为此目的定义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')
})