Ember Checkbox在回调中获取元素的名称

时间:2015-03-31 12:32:30

标签: ember.js

如果我按如下方式定义一个复选框:

  {{input type="checkbox" name="email" checked=controller.isEmailChecked}} Email

在回调controller.isEmailedChecked中,定义为:

isEmailChecked: function(key, value) {
 ...
}

如何获得name的价值("电子邮件")?

我的控制器负责显示多个复选框,所以我不想写这样的行:

  {{input type="checkbox" name="x" checked=controller.isXChecked}} X
  {{input type="checkbox" name="y" checked=controller.isYChecked}} Y

只做:

ixXChecked: function(key, value) {
  // Set or Get
  this.set('x', value);
  this.get('x');
}
ixYChecked: function(key, value) {
  // Set or Get
  this.set('y', value);
  this.get('y');
}

有人可以指点我的文件。

编辑:同样适用于按钮上的操作:

        <button {{action 'toggleSetting'}}>
        </button>

如何在toggleSetting回调中获取元素的名称?

非常感谢,

2 个答案:

答案 0 :(得分:0)

您可以将参数传递给这样的操作:{{action "post" "test"}}其中第二个测试也可以是变量。 {{action "post" mail}}

至于复选框我用物品控制器来解决这个问题:

{{#each thing in things itemController='thing'}}
    {{input type="checkbox" checked=onChecked}}
{{/each}}

你的控制器看起来像是:

App.ThingController = Ember.Controller.extend({
  needs: ['parent'] //where parent is the name of your other controller.
  action: {
    isChecked: function() {
      this.get('contollers.parent')
          .send('checkboxChecked', this.get('model.name'));
    }
  }
});

或者您可以添加组件,我们可以将其称为named-checkbox。这看起来像这样:

模板(app / templates / components / named-checkbox.hbs):

{{input name=name type="checkbox" checked=onChecked}}
{{yield}}

组件(app / components / named-checkbox.js):

import Ember from 'ember';
import layout from '../templates/components/named-checkbox';

export default Ember.Component.extend({
  layout: layout,
  name: "",
  action: {
    onChecked: function() {
      this.sendAction(this.get('action'), this.get('name'));
    }
  }
});

然后你可以像这样使用它:

{{named-component name="email" action=isChecked}}

这将导致在控制器上调用isChecked操作,其名称为其属性:

actions: {
  isChecked: function(name) {
    this.set('name', !this.get('name'))
  }
}

答案 1 :(得分:0)

感谢albertjan,但这更简单:

{{view Ember.Checkbox checkedBinding=someModelProperty}}

单击时会更新someModelProperty,并且最初也会设置正确的值。