在YII2中使用Pjax更新div

时间:2014-05-30 11:35:28

标签: pjax yii2

我尝试在 yii2 项目中使用 Pjax 小部件。
我的目标是使用一些内容更新div #formsection 我的代码: 图

<?php Pjax::begin(); ?>
   <div id="formsection"></div>
   <?php foreach ($tree as $id => $name): ?>
        <?php echo Html::a(
            $name, 
            ['update', 'id'=>$id],
            ['data-pjax'=> '#formsection']) ?>
   <?php endforeach ?>
<?php Pjax::end(); ?>

更新行动

public function actionUpdate($id)
{
    return $this->renderAjax('update');
}

当我点击链接时,所有pjax div内容都会被来自服务器的响应所取代。我只想更新#formsection内容。

我找到了帖子here,但它也不起作用。

更多信息: 这是Pjax小部件在页面中生成的js代码。

jQuery(document).ready(function () {
jQuery(document).pjax("#w0 a", "#w0", {"push":true,"replace":false,"timeout":1000,"scrollTo":false});
jQuery(document).on('submit', "#w0 form[data-pjax]", function (event) {jQuery.pjax.submit(event, '#w0', {"push":true,"replace":false,"timeout":1000,"scrollTo":false});});
});

我的代码有什么问题?


我解决了这个问题。我不得不改变观点。

<div id="categories">
    <?php foreach ($tree as $id => $name): ?>
        <?php echo Html::a(
                $name, 
                ['update', 'id'=>$id],
                ['data-pjax'=> '#formsection']) ?>
    <?php endforeach ?>
</div>
<?php Pjax::begin(['id'=>'formsection', 'linkSelector'=>'#categories a']); ?>
<?php Pjax::end(); ?>

4 个答案:

答案 0 :(得分:6)

Pjax

的正确解决方案

如果您不想在Pjax::begin()Pjax::end()之间放置代码数据 使用Pjax::widget()并添加linkSelector选项:

Pjax::widget(['id' => 'formsection', 'linkSelector' => '#categories a']);

其中formsection是在单击#categories a链接时接收Pjax返回的数据的元素的id。 #categories a JQuery Selector

答案 1 :(得分:3)

有点晚了,但我想补充一些东西 - 无论你设置什么,pjax id属性都将填充ajax响应。在我的情况下,我只想回复一个&#34;已保存的&#34;消息而不是替换整个表单所以我使用了这个:

<span id="modal-response"></span>'

<?php
Pjax::widget([
    'id' => 'modal-response',  // response goes in this element
    'enablePushState' => false, 
    'enableReplaceState' => false, 
    'formSelector' => '#options-form',// this form is submitted on change
    'submitEvent' => 'change',
    ]);
?>

答案 2 :(得分:1)

我认为,只需从pjax中编写该div即可解决问题。只是一个猜测!

像这样,

 <div id="formsection"></div>

 <?php Pjax::begin(); ?>
 <?php foreach ($tree as $id => $name): ?>
    <?php echo Html::a(
        $name, 
        ['update', 'id'=>$id],
        ['data-pjax'=> '#formsection']) ?>
 <?php endforeach ?>
 <?php Pjax::end(); ?>

此外,在控制器中,部分渲染视图。

 return $this->renderPartial('update');

答案 3 :(得分:1)

你不能通过Pjax重新加载不同的块,就像你在Pjax中使用的那样。 Pjax只重新加载其中的块。 例如:

Pjax::begin(['id' => 'boxPajax']);
    <a>some html<a>
Pjax::end();

所以在html中你会选择

<div id="boxPajax">
    <a>some html<a>
</div>

当你点击链接时,Pjax会在此链接中向url发送请求,然后他将重新加载id =&#34; boxPajax&#34;成功回应。