2016-10-12 5 views
0

Я новичок в backgrid и использую его в форме, чтобы пользователь мог выбрать строку (с помощью флажка), а затем нажать «Отправить». Я не могу понять, как настроить мою сетку, чтобы вести себя как «радиокнопки» в том, что можно выбрать только одну строку. Является ли это что-то backgrid изначально поддерживает или мне нужно написать обработчик, чтобы «отменить выбор» ранее выбранных строк?backgrid.js - как предотвратить многострочный выбор?

+0

Я могу видеть, как настроить обработчик событий, чтобы поймать ряд быть выбрано 'wellCollection.on ('backgrid: selected', function (model, selected) { alert (выбрана строка Backgrid!) + model.attributes.api + ':' + selected); }); работает хорошо. Тем не менее, я хотел бы перебрать все строки и, если любые другие строки «выбраны», предотвратит дополнительный выбор. Мой JavaScript недостаточно зрел, чтобы прочитать источник Backgrid и понять это. –

ответ

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 был заполнен.

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>