2016-10-12 99 views
0

我是新來的backgrid,並在表單中使用它以允許用戶選擇一行(通過複選框),然後單擊「提交」。我無法弄清楚如何配置我的網格行爲像「單選按鈕」,因爲只能選擇一行。這是什麼本身支持的backgrid或我是否需要編寫一個處理程序來「取消選擇」以前選擇的行?backgrid.js - 如何防止多行選擇?

+0

我可以看到如何建立一個事件處理程序來捕獲行是('backgrid row was selected!'+ model.attributes.api +':'+ selected); });'which哪個選中了'wellCollection.on('效果很好。但是,我想遍歷所有行,並且如果有其他行被「選中」,則會阻止進行其他選擇。我的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」,但它需要填充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>