Yii ::为什么类值只改变一次?

时间:2012-09-14 07:09:02

标签: php yii

我在我的视图中使用ajaxlink添加我的submitform的新行。我需要一个索引来指示创建了哪一行。所以我使用一个类来保存索引。但我发现变量只改变了一次。

这是我的代码

public function actionNewrow()
{
    $this->i++;

    $form = new CActiveForm();
    $temp = new exportprice();

    array_push($this->exps, $temp);
    //echo count($this->exps);

    $i = count($this->exps)-1;

    $html = '<tr><td>'.
                $this->i.$form->labelEx($this->exps[0],'['.$i.']productname').$form->textField($this->exps[0],'['.$i.']productname').$form->error($this->exps[0],'['.$i.']productname')
            .'</td>'.
            '<td>'.
                $form->labelEx($this->exps[0],'['.$i.']trend').$form->textField($this->exps[0],'['.$i.']trend').$form->error($this->exps[0],'['.$i.']trend')
            .'</td>'.
            '<td>'.
                $form->labelEx($this->exps[0],'['.$i.']margin').$form->textField($this->exps[0],'['.$i.']margin').$form->error($this->exps[0],'['.$i.']margin')
            .'</td></tr>';
    echo $html;
}

echo CHtml::ajaxLink("新增",
    Yii::app()->createUrl( 'InputReport/newrow' ),

    // ajax options
    array(
        'error' => 'function(data)   { alert("error!");  }',
        'success' => 'function(data) { $("#exptbl").append(data); }',
        'cache'=>false,
    ),

    // htmloptions
    array(
        'id' => 'handleClick',
    )
);

1 个答案:

答案 0 :(得分:0)

所以你通过AJAX调用actionNewrow到你每次都要预先定义的类varialbe $i?那就是原因。 PHP与客户端不一致,因为$i在以这种方式使用时总是等于先前的值++它只会使它成为一次。

您需要在客户端以某种方式向我们发送$i来发送它:

  • 从您拥有的行数+1(这是对索引重复开放)
  • 在JS中容纳$ i var并在自定义函数(可能在ajaxLink构建器之外)中使用它来使用JS中的$i var作为类var来传播新行。

一个简单的例子:

var i = <?php echo $this->i // presuming i is a controller car you pass to the view ?>;

$('.add_new_row').on('click', function(){
    $.get('InputReport/newrow', {i:i}, function(data){
        //append your row now
        i++; // inc i here
    });
});

然后在你的控制器中你会做类似的事情:

public function actionNewrow($i = null)
{
    $i = $i===null ? $this->i++ : $i;

    $form = new CActiveForm();
    $temp = new exportprice();

    array_push($this->exps, $temp);
    //echo count($this->exps);

    $i = count($this->exps)-1;

    $html = '<tr><td>'.
                $this->i.$form->labelEx($this->exps[0],'['.$i.']productname').$form->textField($this->exps[0],'['.$i.']productname').$form->error($this->exps[0],'['.$i.']productname')
            .'</td>'.
            '<td>'.
                $form->labelEx($this->exps[0],'['.$i.']trend').$form->textField($this->exps[0],'['.$i.']trend').$form->error($this->exps[0],'['.$i.']trend')
            .'</td>'.
            '<td>'.
                $form->labelEx($this->exps[0],'['.$i.']margin').$form->textField($this->exps[0],'['.$i.']margin').$form->error($this->exps[0],'['.$i.']margin')
            .'</td></tr>';
    echo $html;
}

这应该有希望帮助你,