3

我对 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 }},我可以调用{{getLoanCosts}}我的 template.hbs,以显示计算的成本。这适用于文本/数字输入。

但是,我需要一个带有两个值(是和否)的单选按钮输入。这应该与deductible我的组件中的价值一致(即这笔贷款是否可以扣除?)。但是,如果我这样做:

Yes {{ input type="radio" name="deductible" value=deductible }}
No {{ input type="radio" name="deductible" value=deductible }}

我无法为这两个输入设置值,就像直接使用 HTML 一样。如果我设置 value=0 和 value=1,它们永远不会在我的组件中更新。如何deductible根据选择是或否来更新组件中的我?

4

3 回答 3

8

是的,所以 Ember 没有内置对单选按钮的支持。尝试制作自己的组件!通过自己制作,我的意思是无耻地从互联网上偷一个。

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}}
于 2015-05-14T18:27:55.777 回答
4

您的两个单选按钮具有相同的值,它们不应该具有相同的值。它们需要绑定到不同的属性,但具有不同的值。这是一个单选按钮组件的工作示例。

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"}}

http://jsbin.com/gotubuhasu/1/edit

于 2015-05-14T18:19:37.230 回答
2

组件.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"}}

组件.js

actions: {
  clicky (value) {
    this.set("someAttr", value)
  }
}
于 2017-04-22T19:06:26.337 回答