backgrid.js - 如何防止多行选择?

时间:2016-10-12 22:37:34

标签: backbone-collections backgrid

我是backgrid的新手,并在表单中使用它以允许用户选择一行(通过复选框),然后单击"提交"。我无法弄清楚如何配置我的网格表现得像"单选按钮"因为只能选择一行。这是backgrid原生支持的东西,还是我需要写一个处理程序来取消选择"以前选择的行?

2 个答案:

答案 0 :(得分:0)

这是一个快速肮脏的方法:

        wellCollection.on('backgrid:selected', function(model, selected) {
            if (wellGrid.getSelectedModels().length > 1) {
                model.trigger("backgrid:select", model, false);
                alert('Only one selection is allowed.');
            }
        });

缺点是这种方法需要使用“SelectAll”,这对用户来说实际上是违反直觉的。我宁愿不能使用“SelectAll”,但需要填充getSelectedModels对象。

答案 1 :(得分:0)

您可以创建一个呈现单选按钮的自定义单元格。下面的实现可能需要更多的工作,但这样的事情会让你开始:

var RadioCell = Backgrid.Cell.extend({
    events: {
        "click .selectedRadio": "makeSelected"
    },
    render: function () {
        this.template = Mustache.to_html($("#radioCell").html(), this.model.toJSON());
        this.$el.html(this.template);
        this.delegateEvents();
        return this;
    },
    makeSelected: function () {
        // set all to inactive
        this.model.collection.invoke('set', { "SomeModelAttrib": false });
        // check if radio is checked and set the value on the model
        var radioValue = $("input[name='someSelection']").is(":checked");
        this.model.set("SomeModelAttrib", radioValue);
    }
});

和小胡子模板:

<script type="text/template" id="radioCell">
<input type='radio' class='selectedRadio' name='someSelection' value="{{SomeModelAttrib}}" {{#SomeModelAttrib}}checked{{/SomeModelAttrib}}>
</script>