I use jQuery widget factory (jQuery widgets) for my js widgets.
$.widget('cool.someWidget', {
options: {
onSomething: null
}
// other js code
});
Normally to run the widget from js you write
$(selector).someWidget({
onSomething: function() { ..... }
});
In Yii I use CJSON::encode to compile all the initialization properties which include the onSomething event.
echo CJSON::encode(array(
'onSomething' => 'function() {....}',
));
However due to the conversion (CJSON), it converts the function() {...} to a string so in the document it is written the following
$(selector).someWidget({
onSomething: "function() { .... }"
});
because the onSomething is actually a string when I call the this._trigger('onSomething') it doesn't run the code.
This problem I have only when I "generate" the view and not with Ajax requests (which I handle differently in the system). Is there some "normal" way of making Yii actually write in the document the function withought the quotes?
There is actually a build in way to prevent the encode function from wrapping function declaration with quotes , you should add js: before your function declaration
CJavaScript::enocde(array(
'prop'=>'value',
'callback' => 'js:function(){}'
))