在Ember中传递行动的论点

时间:2015-08-01 14:52:35

标签: javascript ember.js handlebars.js

我的“hbs”文件中有三个切换按钮。 我在控制器中有与此模板相关的“选项”数组。 我想在用户选择/取消选择任何按钮时更新“选项”。 例如,如果选择了按钮1而其他没有 - “选项”必须是[1]。 如果选择了第二个和第三个按钮,则首先不选择 - “选项”必须为[2,3]。

我尝试通过参数操作来实现这一点:

<button {{action 'toggleOption' name aria-pressed}}
id="first-button" name="1" type="button" class="btn 
option-toggle-button" data-toggle="button" aria-pressed="false"
autocomplete="off">First button</button>

控制器:

import Ember from 'ember';

export default Ember.Controller.extend({
    options: [],
    actions: {
        toggleOption(id, selected) {
            var options = this.get("options");

            if (selected) {
                if (options.contains(id))
                    options.push(id);
            } else {
                var index = options.indexOf(id);
                if (index >= 0)
                    options.splice(index, 1);
            }

            this.set("options", options);
        }
    }
});

但是“toggleOption”用“未定义”的参数调用,所以我认为我的方法错了。

问题:如何实现所需的逻辑?也许我需要一种完全不同的方法来解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以使用:

<button {{action 'toggleOption' "1"}} id="first-button" name="1" type="button" class="btn option-toggle-button" data-toggle="button" aria-pressed="false"autocomplete="off">First button</button>

<button {{action 'toggleOption' "2"}} id="first-button" name="1" type="button" class="btn option-toggle-button" data-toggle="button" aria-pressed="false"autocomplete="off">Second button</button>

其中"1" and "2"是传递给控制器​​操作的值。 然后在toggleOption操作中,您可以执行逻辑以将值添加/移除到options数组

actions: {
    toggleOption(value) {
        // ...your logic here...
    }
}