在YII2中使用Pjax更新div

ahb*_*360 13 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(); ?>
Run Code Online (Sandbox Code Playgroud)

更新动作

public function actionUpdate($id)
{
    return $this->renderAjax('update');
}
Run Code Online (Sandbox Code Playgroud)

当我单击链接时,所有pjax div内容都将被服务器的响应替换.我想要#formsection更新内容.

我在这里发现了一个帖子,但它也不起作用.

更多信息:这是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});});
});
Run Code Online (Sandbox Code Playgroud)

我的代码有什么问题?


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

<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(); ?>
Run Code Online (Sandbox Code Playgroud)

小智 6

适当的Pjax解决方案

如果您不想在其间放置标签数据Pjax::begin(),请Pjax::end() 使用Pjax::widget()并包含以下linkSelector选项:

Pjax::widget(['id' => 'formsection', 'linkSelector' => '#categories a']);
Run Code Online (Sandbox Code Playgroud)

其中是单击链接formsection时接收Pjax返回的数据的元素的id #categories a.#categories a是一个JQuery选择器


gly*_*yph 5

有点晚了,但我想添加一些内容 - 无论您将 pjax id 属性设置为什么,都将填充 ajax 响应。在我的情况下,我只想用“已保存”消息进行回复,而不是替换整个表单,所以我使用了这个:

<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',
    ]);
?>
Run Code Online (Sandbox Code Playgroud)


Den*_*G B 1

我认为,只需将 div 写出pjax即可解决问题。只是一个猜测!

像这样,

 <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(); ?>
Run Code Online (Sandbox Code Playgroud)

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

 return $this->renderPartial('update');
Run Code Online (Sandbox Code Playgroud)