ember 中单选按钮的记录值
Recording values of radio buttons in ember
我是 Ember 的新手(使用版本 0.2.3)。我有一个包含一些计算值的组件。他们从输入字段中收集这些计算值:
export default Component.extend({
loanAmount : 200000,
deductible : 0,
debtInt : 5,
getLoanCosts: computed('loanAmount', 'debtInt', function(){
return (get(this, 'debtInt')/12) * get(this, 'loanAmount');
})
在我的 template.hbs 上,我有一个输入字段 {{ input value=loanAmount }}
,我可以在我的 template.hbs 中调用 {{getLoanCosts}}
来显示计算的成本。这对 text/number 输入非常有效。
但是,我需要一个带有两个值(是和否)的单选按钮输入。这应该与我的组件中的 deductible
值一致(即这笔贷款是否可以扣除?)。但是,如果我这样做:
Yes {{ input type="radio" name="deductible" value=deductible }}
No {{ input type="radio" name="deductible" value=deductible }}
我无法为这两个输入设置值,就像直接 HTML 一样。如果我设置 value=0 和 value=1,它们永远不会在我的组件中更新。如何根据选择是或否更新组件中的 deductible
?
您的两个单选按钮都具有它们不应该具有的相同值。它们需要绑定到不同的属性但具有不同的值。这是单选按钮组件的工作示例。
Ember.RadioButton = Ember.View.extend({
tagName : 'input',
type : 'radio',
attributeBindings : ['name', 'type', 'value', 'checked:checked:'],
click : function() {
this.set('selection', this.$().val());
},
checked : function() {
return this.get('value') === this.get('selection');
}.property()
});
App.ApplicationController = Ember.Controller.extend({
deductible: 0
});
Yes {{view Ember.RadioButton selectionBinding="deductible" value=1 name="deductible"}}
No {{view Ember.RadioButton selectionBinding="deductible" value=0 name="deductible"}}
是的,所以 Ember 没有内置对单选按钮的支持。尝试制作自己的组件!自己制作我的意思是无耻地从 internet.
偷一个
import Ember from 'ember';
export default Ember.Component.extend({
tagName: 'input',
type: 'radio',
attributeBindings: ['type', 'htmlChecked:checked', 'value', 'name', 'disabled'],
htmlChecked: function() {
return this.get('value') === this.get('checked');
}.property('value', 'checked'),
change: function() {
this.set('checked', this.get('value'));
},
_updateElementValue: function() {
Ember.run.next(this, function() {
this.$().prop('checked', this.get('htmlChecked'));
});
}.observes('htmlChecked')
});
并且在组件中,单选按钮仍然有值,但是选择的绑定是传入选中的 属性:
Yes{{radio-button value='1' checked=choice}}
No{{radio-button value='0' checked=choice}}
component.hbs
<label>No</label>
{{input click=(action "clicky" false) type="radio" name="someAttr"}}
<label>Yes</label>
{{input click=(action "clicky" true) type="radio" name="someAttr"}}
component.js
actions: {
clicky (value) {
this.set("someAttr", value)
}
}
我是 Ember 的新手(使用版本 0.2.3)。我有一个包含一些计算值的组件。他们从输入字段中收集这些计算值:
export default Component.extend({
loanAmount : 200000,
deductible : 0,
debtInt : 5,
getLoanCosts: computed('loanAmount', 'debtInt', function(){
return (get(this, 'debtInt')/12) * get(this, 'loanAmount');
})
在我的 template.hbs 上,我有一个输入字段 {{ input value=loanAmount }}
,我可以在我的 template.hbs 中调用 {{getLoanCosts}}
来显示计算的成本。这对 text/number 输入非常有效。
但是,我需要一个带有两个值(是和否)的单选按钮输入。这应该与我的组件中的 deductible
值一致(即这笔贷款是否可以扣除?)。但是,如果我这样做:
Yes {{ input type="radio" name="deductible" value=deductible }}
No {{ input type="radio" name="deductible" value=deductible }}
我无法为这两个输入设置值,就像直接 HTML 一样。如果我设置 value=0 和 value=1,它们永远不会在我的组件中更新。如何根据选择是或否更新组件中的 deductible
?
您的两个单选按钮都具有它们不应该具有的相同值。它们需要绑定到不同的属性但具有不同的值。这是单选按钮组件的工作示例。
Ember.RadioButton = Ember.View.extend({
tagName : 'input',
type : 'radio',
attributeBindings : ['name', 'type', 'value', 'checked:checked:'],
click : function() {
this.set('selection', this.$().val());
},
checked : function() {
return this.get('value') === this.get('selection');
}.property()
});
App.ApplicationController = Ember.Controller.extend({
deductible: 0
});
Yes {{view Ember.RadioButton selectionBinding="deductible" value=1 name="deductible"}}
No {{view Ember.RadioButton selectionBinding="deductible" value=0 name="deductible"}}
是的,所以 Ember 没有内置对单选按钮的支持。尝试制作自己的组件!自己制作我的意思是无耻地从 internet.
偷一个import Ember from 'ember';
export default Ember.Component.extend({
tagName: 'input',
type: 'radio',
attributeBindings: ['type', 'htmlChecked:checked', 'value', 'name', 'disabled'],
htmlChecked: function() {
return this.get('value') === this.get('checked');
}.property('value', 'checked'),
change: function() {
this.set('checked', this.get('value'));
},
_updateElementValue: function() {
Ember.run.next(this, function() {
this.$().prop('checked', this.get('htmlChecked'));
});
}.observes('htmlChecked')
});
并且在组件中,单选按钮仍然有值,但是选择的绑定是传入选中的 属性:
Yes{{radio-button value='1' checked=choice}}
No{{radio-button value='0' checked=choice}}
component.hbs
<label>No</label>
{{input click=(action "clicky" false) type="radio" name="someAttr"}}
<label>Yes</label>
{{input click=(action "clicky" true) type="radio" name="someAttr"}}
component.js
actions: {
clicky (value) {
this.set("someAttr", value)
}
}