The form_radio component is Vue.js driven child component of the form component and is used to collect user input.
form my_form_config do form_radio key: :status, options: { 'active':1,'deactive':0 },#...end
All child components form_* (including this component) have to be placed within the scope of the parent form component, without any other Vue.js driven component like toggle, async creating a new scope between the child component and the parent form component! Non-Vue.js component can be placed between form and form_* without issues!
# that's working:form some_form_config do form_* key: :foo toggle show_on: "some-event"do plain "hello!"endend# that's not working:form some_form_config do toggle show_on: "some-event"do form_* key: :fooendend
Parameters
key - required
Defines the key which should be used when posting the form data to the server.
options - required
Can either be an Array or Hash:
Array usage
form my_form_config do form_radio key: :status, options: [0,1]end
form my_form_config do form_radio key: :status, options: Conversation.statusesend
disabled_values - optional
NOT IMPLEMENTED YET
init - optional
Defines the init value of the radio input. If mapped to an ActiveRecord model, the init value will be derived automatically from the model instance.
Pass in an Integer:
form my_form_config do form_radio key: :status, [1,2,3], init: 1end
placeholder - optional
Defines the placeholder which will be rendered as first, disabled option.
label - optional
NOT IMPLEMENTED YET
You can also use the label component in order to create a label for this input.
Custom Radio
If you want to create your own radio component, that's easily done since v.1.3.0.
Create your own Ruby component:
app/matestack/components/my_form_radio.rb
classComponents::MyFormRadio<Matestack::Ui::Core::Form::Radio::Base vue_js_component_name "my-form-radio"defprepare# optionally add some data here, which will be accessible within your Vue.js component @component_config[:foo] ="bar"enddefresponse# exactly one root element is required since this is a Vue.js component template div class: "your-custom-markup"do render_options render_errorsendendend
MatestackUiCore.Vue.component('my-form-radio', { mixins: [MatestackUiCore.componentMixin,MatestackUiCore.formRadioMixin],data() {return {}; }, methods: {afterInitialize:function(value){// optional: if you need to modify the initial value// use this.setValue(xyz) in order to change the value// this method can be used in other methods or mounted hook of this component as well!this.setValue(xyz) } },mounted:function(){// use/initialize any third party library here// you can access the default initial value via this.componentConfig["init_value"]// if you need to, you can access your own component config data which added// within the prepare method of the corresponding Ruby class// this.componentConfig["foo"] would be "bar" in this case }});
Don't forget to require the custom component JavaScript according to your JS setup!
Finally, use it within a form:
form some_form_config do my_form_radio key: :foo, options: [1,2,3]end