I want to set the options for widget with JSON file variable values? How can I do it plus how do I pass the json file to the client side?
The code is being copied from the jQueryUI Widget Factory
<script>
$(function() {
$.widget( "custom.colorize", {
// ***Need to pass option values over here***
options: {
red: 255,
green: 0,
blue: 0,
change: null,
random: null
},
_create: function() {
this.element
// add a class for theming
.addClass( "custom-colorize" )
// prevent double click to select text
.disableSelection();
this.changer = $( "<button>", {
text: "change",
"class": "custom-colorize-changer"
})
.appendTo( this.element )
.button();
this._on( this.changer, {
click: "random"
});
this._refresh();
},
_refresh: function() {
this.element.css( "background-color", "rgb(" +
this.options.red +"," +
this.options.green + "," +
this.options.blue + ")"
);
this._trigger( "change" );
},
// ***And in the random function as well***
random: function( event ) {
var colors = {
red: Math.floor( Math.random() * 256 ),
green: Math.floor( Math.random() * 256 ),
blue: Math.floor( Math.random() * 256 )
};
if ( this._trigger( "random", event, colors ) !== false ) {
this.option( colors );
}
},
_destroy: function() {
// remove generated elements
this.changer.remove();
this.element
.removeClass( "custom-colorize" )
.enableSelection()
.css( "background-color", "transparent" );
},
_setOptions: function() {
this._superApply( arguments );
this._refresh();
},
_setOption: function( key, value ) {
if ( /red|green|blue/.test(key) && (value < 0 || value > 255) ) {
return;
}
this._super( key, value );
}
});
$( "#my-widget1" ).colorize();
$( "#my-widget2" ).colorize({
red: 60,
blue: 60
});
$( "#my-widget3" ).colorize( {
green: 128,
random: function( event, ui ) {
return ui.green > 128;
}
});
$( "#disable" ).click(function() {
if ( $( ":custom-colorize" ).colorize( "option", "disabled" ) ) {
$( ":custom-colorize" ).colorize( "enable" );
} else {
$( ":custom-colorize" ).colorize( "disable" );
}
});
$( "#black" ).click( function() {
$( ":custom-colorize" ).colorize( "option", {
red: 0,
green: 0,
blue: 0
});
});
});
</script>
</head>
One solution will be to use the
_getCreateOptions
function to achieve that.Have a look in the jquery-ui widget factory code to see where this
_getCreateOptions
function is called:As you can see your widget
options
will be merged with the value returned by your_getCreateOptions
function, and this will be done only at widget creation time and before the call to your_create
and_init
functions.In your case your
_getCreateOptions
can perform an ajax call to retrieve your json data from server side. Something like :Another solution, could be :
$('selector').colorize(colorizeOptions)
at creation time