【问题标题】:Ember loop through an array of checkboxes and get checked items?Ember 循环遍历一组复选框并获取选中的项目?
【发布时间】:2015-12-28 12:12:46
【问题描述】:

我有一个 Ember.js 应用程序(使用 Ember CLI)。我有一个名为sideMenu 的组件,其中包含文件sideMenu.jssideMenu.hbs。在 .js 文件中,我有一组车辆名称,如下所示:

export default Ember.Component.extend({
    vehicles: ['Audi', 'Chrysler', 'Harley Davidson'],
    vehicleCheckboxes: { 'Audi': true, 'Chrysler': true, 'Harley Davidson': true }
});

在这个组件的模板中,我循环遍历这些车辆并为每个项目创建一个复选框,如下所示:

{{#each vehicles as |vehicle|}}
    {{input type='checkbox' checked='true'}} {{vehicle}}
{{/each}}

这给了我我想要的东西——旁边有几个带有车辆名称的复选框。我希望能够知道用户在此列表中未选中/选中的内容。我尝试通过在模板中动态创建一些 Ember 属性来做到这一点:

{{input type='checkbox' checked="{{vehicleCheckboxes}}.{{vehicle}}"}}

但这似乎不起作用。我怎样才能做到这一点? Ember 文档中似乎没有任何迹象表明它可以以任何方式从框架内进行。

【问题讨论】:

    标签: javascript ember.js


    【解决方案1】:

    checked 需要布尔值 (true/false) 你可以像这样使用addon

    {{multiselect-checkboxes options=vehicles selection=selectedVehicles}}

    或者你可以有这样的循环:

    {{#each vehicles as |vehicle|}}
        {{input type='checkbox' checked=(get vehicleCheckboxes vehicle)}} {{vehicle}}
    {{/each}}
    

    并且您需要将您的 vehicleCheckboxes 转换为 Ember.Object 我认为如果它不能按原样工作

    vehicleCheckboxes: Ember.Object.create({ 'Audi': true, 'Chrysler': true, 'Harley Davidson': true })

    【讨论】:

    • 你提到的插件很完美!但是,我在选择上设置了一个观察者,当我与复选框交互时,它似乎没有更新。我在我的 .js 文件中创建了一个名为 selectedVehicles 的新属性,并为其分配了一个空数组。我应该以其他方式做吗?
    • 我认为你的数组应该是Ember.A()而不是[],那么你可以像Ember.computed("selectedVehicles.[]",....一样观察它
    • 我像你提到的那样声明了数组,但我不确定我是否理解你指定的观察者格式。当我将其输入观察者时,它会引发错误。你能解释一下你的意思吗?
    • 好的,我知道了,我将其视为.observes('selectedVehicles.@each') 并且它有效。谢谢!
    • 抱歉,在大多数情况下你应该避免观察者,所以我在那里输入的内容实际上是创建计算属性的不同形式,无论如何,如果你需要它,观察者你可以 Ember.observer('selectedVehicles.[]')function(){}.observes('selectedVehicles.[]')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    • 2013-04-19
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 2021-06-20
    相关资源
    最近更新 更多