我正在查看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
元素实现双向绝对数据绑定的最佳方法是什么?
答案 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')
})