3

js ウィジェットに jQuery ウィジェット ファクトリ (jQuery ウィジェット) を使用しています。

$.widget('cool.someWidget', {
     options: {
         onSomething: null
     }
     // other js code
});

通常、あなたが書いたjsからウィジェットを実行するには

$(selector).someWidget({
    onSomething: function() { ..... }
});

Yii では、CJSON::encode を使用して、onSomething イベントを含むすべての初期化プロパティをコンパイルします。

echo CJSON::encode(array(
    'onSomething' => 'function() {....}',
));

ただし、変換(CJSON)により、 function() {...} を文字列に変換するため、ドキュメントでは次のように記述されています

$(selector).someWidget({
    onSomething: "function() { .... }"
});

this._trigger('onSomething') を呼び出すと、onSomething は実際には文字列であるため、コードは実行されません。

この問題は、ビューを「生成」した場合にのみ発生し、Ajax リクエスト (システムで異なる方法で処理します) では発生しません。Yiiに引用符なしで関数を実際にドキュメントに書き込む「通常の」方法はありますか?

4

4 に答える 4

0

私が望んでいたことを正確に行う次の関数を書きました。それでも、ネイティブの Yii ソリューションがあれば、ぜひ知りたいです。

public function encodeOpts($data, $jsCode = null) {
    $rVal = CJSON::encode($data);

    if ($jsCode == null)
        return $rVal;

    foreach($jsCode as $key => $code) {
        $codeEntries[] = "\"{$key}\": {$code}";
    }

    return substr_replace($rVal, ', ' . implode(', ', $codeEntries), -1) . '}';
}
于 2012-09-05T20:30:47.027 に答える