0

通过考虑以下代码片段:

if('<?= Yii::app()->controller->action->id?>' == 'create'){
 $("#Event_name").focusout(function(){
  $.ajax({
    success: function(html)
    {
     type: 'get',
     url: '<?php echo $this->createUrl('related'); ?>'

这行得通。但是......这是一种正确的做法吗?我宁愿在一侧使用 php,在另一侧使用 javascript,这有意义吗?

有人可以给我一个例子,说明正确完成后这样的事情会是什么样子?

4

4 回答 4

1

是的,您应该使用 JSON。这样您就不必担心引号或</script>字符串中间的问题。

if(<?= json_encode(Yii::app()->controller->action->id) ?> == 'create'){
   ...
     url: <?php echo json_encode($this->createUrl('related')); ?>
于 2012-06-15T20:32:16.067 回答
1

我对您使用的框架没有很好的经验,但是如果您将变量从控制器传递到您的视图会更好:

控制器:

...
$action_id = Yii::app()->controller->action->id;
$created_url = $this->createUrl('related'); //$this might not be in context here

$this->render('your_view_name', array('action_id'=>$action_id, 'created_url'=>$created_url));
...

看法:

if('<?= $action_id ?>' == 'create'){
 $("#Event_name").focusout(function(){
  $.ajax({
    success: function(html)
    {
     type: 'get',
     url: '<?= $created_url ?>'
于 2012-06-15T20:39:34.360 回答
0

就个人而言,我建议将该条件移动到您的控制器中。它非常简单,可以通过 PHP 处理,无需在模板中检查该等式。

我对 Yii 不是很熟悉,但可能会重写如下:

$action_id = Yii::app()->controller->action->id;
$params = array();
if ($action_id == 'action') {
    $created_url = $this->createUrl('related'); //$this might not be in context here
    $params['handler'] = $this->render('yourhandler.tpl.php', array('created_url'=>$created_url));
}
$this->render('your_view_name', $params);
于 2012-06-15T21:26:52.943 回答
0

CJavaScript::encode()是你的人,它是传递变量和数组,甚至将字符串从 PHP 转义到 JavaScript 的好方法。

于 2012-06-16T17:52:38.220 回答