【问题标题】:YII2 - Partial update on anchor tag clickYII2 - 锚标签点击部分更新
【发布时间】:2016-09-30 11:39:51
【问题描述】:

在 Yii2 中单击锚标记时,我无法渲染部分内容。

我的视图代码如下:

<div class="col-md-5 module">

    <h2><?php echo $client->subtitle ?></h2>

    <div class="text-center industries-wrapper">

        <div class="center-wrapper clearfix">
            <ul class="nav nav-pills">
                <?php foreach ($clientMarkets as $key => $clientMarket) : ?>
                    <li <?= ($key == 0) ? 'class="active"' : '' ?>>
                        <a <?= ($key == 0) ? 'href="#1a"' : 'href="#2a"' ?> data-toggle="tab">
                            <?php echo $clientMarket->title ?>
                        </a>
                    </li>
                <?php endforeach; ?>
            </ul>
        </div>

        <div class="tab-content center-wrapper clearfix">
            <?php foreach ($clientMarkets as $key => $clientMarket) : ?>
                <div id="1a" <?= ($key == 0) ? 'id="1a"' : 'id="2a"' ?>
                     class="tab-pane<?= ($key == 0) ? ' active' : '' ?>">

                    <div class="contact-info">
                        <ul>
                            <?php foreach ($clientMarket->children as $key => $client) : ?>
                                <li><a><?php echo $client->title ?></a></li>
                            <?php endforeach; ?>
                        </ul>
                    </div>
                </div>
            <?php endforeach; ?>
        </div>

    </div>

    <hr>

    <div class="client-description hidden-xs"><?php echo $clientDescription->short ?></div>
</div>

<div class="col-md-7 module">
    <div id="client-section-carousel" class="carousel slide" data-ride="carousel">
        <div class="carousel-inner" role="listbox">
            <?php echo $this->render('_partials/references', ['name' => 'value']) ?>
        </div>
    </div>
</div>

当单击 div contact-info 中的锚标记时,我希望使用类 carousel-inner 更新 div 中的部分视图。

我查找了一些使用 ajax 的示例,但不知道如何在点击时更新部分内容。

感谢您的帮助。

【问题讨论】:

    标签: javascript onclick yii2 partials


    【解决方案1】:

    如果你不想写简单的JS/AJAX代码有自己的逻辑,你可以尝试使用Pjax

    类似这样的:

    <a href="#" onclick="$.pjax.reload('#pjaxId', {timeout : false});">Update Pjax container via AJAX</a>
    
    ...
    
    <div class="carousel-inner" role="listbox">
    
        <?php
        Pjax::begin(['id' => 'pjaxId']);
    
        echo $this->render('_partials/references', ['name' => 'value']);
    
        Pjax::end();
        ?>
    
    </div>
    

    UPD:

    如果您想更改 URL 以进行 AJAX 更新,请使用:

    <?php $ajaxUrl = \yii\helpers\Url::to(['some-controller/some-action']); ?>
    
    <a href="#" onclick="$.pjax.reload('#pjaxId', {timeout : false, url: '<?= $ajaxUrl ?>'});">
         Update Pjax container via AJAX
    </a>
    

    【讨论】:

    • 感谢您的帮助 IStranger !但是我不知道当点击事件被触发时如何更新部分数据。我是 Yii2 的新手,我不知道我想做的是否基于正确的方法。当点击事件触发时,它应该在控制器中调用一个动作并返回应该传递给视图中的渲染函数的数据,而无需重新加载页面。
    • 是的,我试过你的代码,它工作正常,但点击事件应该在 SiteController 中调用一个动作,然后用新数据更新部分,但我不知道该怎么做。
    • @Dave747 我更新了答案(我希望我正确理解你的意思“点击事件应该在 SiteController 中调用一个动作”)。
    • @IStanger - 非常感谢您的帮助!为了让它按我的意愿工作,我必须将此代码放在我的 SiteController public function actionReferences($id) { $items = Item::find()-&gt;with(['category'])-&gt;where(['category_id' =&gt; $id])-&gt;status(Item::STATUS_ON)-&gt;all(); return $this-&gt;renderPartial('_partials/references', ['ref1' =&gt; $items]); } 中,因为我的索引视图已经包含部分的渲染功能,这是正确的方法吗?为了防止触发点击事件时 url 发生变化,我不得不把这个参数 replace: false 放在 jQuery.pjax.reload 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多