php - 向下滚动时,yii2 在下拉 div 中越来越多地显示通知
问题描述
我正在努力在 select2 kartik 小部件中获取通知,并且一切都运行良好,现在我正在尝试修改我的代码以在我的下拉 div 中获取我的数据,但我没有这样做的想法。
这是我要在视图中修改的代码
<div class="dropdown-menu animated flipInX">
<div class="dropdown-body niceScroll ">
<!-- Start notification list -->
<div class="media-list small">
<a href="#" class="media">
<?php
$notificationUrl = Url::to(['site/notification-list']);
echo Select2::widget([
'name' => 'state_800',
'pluginOptions' => [
'ajax' => [
'url' => $notificationUrl,
'dataType' => 'json',
'data' => new JsExpression('function(params) { return {q:params.term, page:params.page || 1}; }')
],
'escapeMarkup' => new JsExpression('function (markup) { return markup; }'),
'templateResult' => new JsExpression('function(product) {;return product.text; }'),
'templateSelection' => new JsExpression('function (subject) { return subject.text; }'),
],
]);
?>
</a>
</div> .......
这是我正在检索数据的操作;所以我的问题是如何在我的下拉 div 中显示它
public function actionNotificationList($page, $q = null, $id = null) {
$offset = ($page - 1) * 10;
Yii::$app->response->format = Response::FORMAT_JSON;
$out = ['results' => ['id' => '', 'text' => '']];
$query = new Query;
$query->select(['notification_id as id', new Expression("notification_text AS text")])
->from('notification')
->offset($offset)
->limit(10);
$command = $query->createCommand();
$data = $command->queryAll();
$out['results'] = array_values($data);
$out['pagination'] = ['more' => !empty($data) ? true : false];
return $out;
}
提前致谢。
解决方案
好吧,据我了解,您正在尝试动态更新 select2 中的选项,如果正确,您可以使用 javascript 来更新 select2 选项。
看起来您的通知来自某些数据库表,您可以发送 ajax 调用以检查是否有任何未读通知并将通知列表返回为 JSON 并Selec2
在运行时更新选项。
我可以演示通过单击按钮,因为 ajax 无法在 SO 上实现,您可以click
用您的 ajax 调用替换按钮并将通知传递给refreshDataSelect2
将更新选项的函数。
$('.notifications').select2({
placeholder: 'Select an option',
'width': '100%'
});
$.fn.refreshDataSelect2 = function(data) {
this.select2('data', data);
// Update options
var $select = $(this[0]);
var options = data.map(function(item) {
return '<option value="' + item.id + '">' + item.text + '</option>';
});
$select.append(options.join('')).change();
};
$("#add").on("click", function() {
let data = [{
id: $('.notifications').children('option').length + 1,
text: "A New Message number " + $('.notifications').children('option').length
}]
$(".notifications").refreshDataSelect2(data);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/js/select2.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/css/select2.min.css" rel="stylesheet" />
<select name="notifications" class="notifications">
<option>some Message</option>
<option>Admin Message</option>
<option>Private Message</option>
</select>
<button id="add">Add Message</button>
推荐阅读
- javascript - 当我从 chrome 开发工具应用程序中将 cookie Expires / Max-Age 更改为之前的当前时间时
- python - 如何扫描子网中的活动站点?
- ios - 使用 POST 请求的 Swift Alamofire
- python - PYTHON3:返回值的缩进
- xml - 如何在经典 ASP 中禁用 DTD 处理以防止 MSSOAP.SOAPClinet30 中的 XXE 攻击
- node.js - Nodejs:在主题交换中使用rabbitmq消息
- c# - 如何从另一个应用程序关闭 WPF 系统托盘应用程序?
- android-studio - 调用接口方法 java.lang.Object[] java.util.Collection.toArray() 时出现 Java NullPointerException
- intellij-idea - 如何获取“保存操作”代码格式以忽略注释
- python - 将元素附加到python中的数组列表之一