2011-11-14 30 views
7

Tôi có một widget tùy chỉnh 'MyWidget' với ba nút radion mà tôi muốn có cùng một "nhóm". Nếu tôi đặt thuộc tính 'tên' trong các nút vô tuyến trong tệp mẫu, thì vấn đề là khi tôi tạo các tiện ích con 'MyWidget' rồi tất cả các nút radio chia sẻ cùng một nhóm.Dojo RadioButton, thiết lập một nhóm theo chương trình

Tôi cố gắng để đưa các 'name' của nút radio với

radioWifget.set('name', some_value) 

nhưng không thành công, và cũng có thể đi trực tiếp đến mã DOM với:

dojo.query("INPUT[type='radio']", this.domNode).forEach(dojo.hitch(this, function(inputNode){ 
    inputNode.name = 'perill_'+this.id; 
})); 

Dạng thứ hai đặt tên attrbitue nhưng nó không hoạt động như một nhóm.

Bất kỳ trợ giúp nào.

Xin cảm ơn trước.


Tôi xin lỗi vì tôi đã tự tìm được câu trả lời.

Tôi sẽ mạo hiểm ai đó bỏ phiếu cho tôi một cách tiêu cực nhưng muốn đưa giải pháp vào đây vì có thể có thể giúp ai đó ngoài tôi.

Giải pháp là các nút radio trong mẫu "MyWidget" phải được đính kèm trong một widget 'dijit.form.Form'. Bằng cách này mỗi 'MyWidget' sẽ có các nhóm radiobutton riêng của mình.

Trả lời

2

tôi sẽ đi cho một FormValueWidget tùy chỉnh và trộn _WidgetsInTemplateMixin, như thế này:

declare([ 
    "dojo/_base/declare", 
    "dijit/form/_FormValueWidget", 
    "dijit/_WidgetsInTemplateMixin", 
    "dijit/form/RadioButton", 
    "dojo/domReady!" 
], function (declare, _FormValueWidget, _WidgetsInTemplateMixin) { 

    return declare([_FormValueWidget, _WidgetsInTemplateMixin], { 
     templateString: "<div><h2>Group of radioBtns '${name}'</h2>" + 
      "<input type='radio' ${!nameAttrSetting} data-dojo-attach-point='focusNode' data-dojo-type='dijit/form/RadioButton' checked='checked' data-dojo-props='value:\"radio1\"'></input>" + 
      "<input type='radio' ${!nameAttrSetting} data-dojo-type='dijit/form/RadioButton' data-dojo-props='value:\"radio2\"'></input>" + 
      "<input type='radio' ${!nameAttrSetting} data-dojo-type='dijit/form/RadioButton' data-dojo-props='value:\"radio3\"'></input>" + 
      "<input type='hidden' value='${value}'/>" + 
      "</div>", 
     _getValueAttr : function() { 
      var selectedRadio = registry.findWidgets(this.domNode).filter(function(w){ 
       return w.get("checked"); 
      }).pop(); 
      return selectedRadio.get("value"); 
     } 
    }); 
}); 

Xem ví dụ ở đây: http://jsfiddle.net/psoares/FdMEU/

Các vấn đề liên quan