Tôi có một hệ thống thông báo hoạt động. Ngay bây giờ, khi không có thông báo hay không, thông báo sẽ xuất hiện trong một số <span class='glyphicon glyphicon-inbox' aria-hidden="true"></span>
giống như stackoverflow. nhưng mong muốn của tôi là khi có thông báo, tôi muốn hộp được chuyển thành một sốnếu số lượng thông báo bằng không, tôi muốn những gì tôi có ngay bây giờ (hộp) nhưng nếu không phải là 0 Tôi muốn hộp được thay đổi thành huy hiệu với số thông báo
<span class="badge badge-notify" style="red">notification count</span>
lại giống như tràn ngăn xếp.
Vì vậy, tôi đã thử xóa một lớp cụ thể thay đổi biểu mẫu của hộp khi đếm == 0 và thêm lớp khi số không phải là 0. Tôi đã thử đặt khoảng thời gian là tốt nhưng nó sẽ không hoạt động.
Bạn có thể giúp tôi không?
dưới đây là những gì tôi có trong thanh điều hướng, tôi có hộp thông báo và thiết lập huy hiệu.
<li class="dropdown">
<a href="#" class="dropdown-toggle notification-toggle" data-toggle="dropdown" role="button" aria-expanded="false" id="button">
<span class='glyphicon glyphicon-inbox' aria-hidden="true"></span>
<span class="caret"></span>
<span class="badge badge-notify">notification count</span></a>
<ul class="dropdown-menu" role="menu" id='notification_dropdown'>
</ul>
</li>
dưới đây là chức năng ajax của tôi để thông báo Disply
<script>
$(document).ready(function(){
$(".notification-toggle").click(function(e){
e.preventDefault();
$.ajax({
type: "POST",
url: "{% url 'get_notifications_ajax' %}",
data: {
csrfmiddlewaretoken: "{{ csrf_token }}",
},
success: function(data){
$("#notification_dropdown").html(' <li role="presentation" class="dropdown-header">alarm</li>');
var count = data.count
console.log(count)
if (count == 0) {
$("#notification_dropdown").removeClass('notification');
var url = '{% url "notifications_all" %}'
$("#notification_dropdown").append("<li><a href='" + url+ "'>view all</a></li>")
} else {
$("#notification_dropdown").addClass('notification');
$(data.notifications).each(function(){
var link = this;
$("#notification_dropdown").append("<li>" + link + "</li>")
})
}
console.log(data.notifications);
},
error: function(rs, e) {
console.log(rs);
console.log(e);
}
})
})
})
</script>
vì vậy những gì tôi kinda cố gắng là điều này,
<style>
{% block style %}
#notification_dropdown{
}
#notification_dropdown.notification{
color: red;
}
{% endblock %}
</style>
and
<script>
setTimeout(function(){
$("#notification_dropdown:visible").addClass('notification');
}, 2000);
</script>
có lẽ tôi thiết lập id sai ... những người đã không làm gì không may .
không chắc chắn nếu điều này là cần thiết, tôi cũng sẽ thêm chức năng thông báo (ajax)
def get_notifications_ajax(request):
if request.is_ajax() and request.method == "POST":
notifications = Notification.objects.all_for_user(MyProfile.objects.get(user=request.user)).recent()
count = notifications.count()
notes = []
for note in notifications:
notes.append(note.get_link.encode('utf-8'))
data = {
"notifications": notes,
"count": count,
}
print data
json_data = json.dumps(data)
print json_data
return HttpResponse(json_data, content_type='application/json')
else:
raise Http404
Vì vậy, câu hỏi của tôi)
1) những gì tôi đã làm gì sai rằng hình thức/màu hộp thông báo không thay đổi khi thông báo không phải là 0 và cách tôi đạt được nội dung tôi muốn là hộp được chuyển thành một số
<span class="badge badge-notify" style="red">notification count</span>
2) Tôi có thể hiển thị số thông báo trong bảng điều khiển wit h console.log (đếm), làm cách nào để hiển thị số này trong thanh điều hướng?
Bạn cần phải sử dụng 'setInterval()' trong javascript để truy vấn các máy chủ cho các thông báo mỗi vài giây, nếu không như thế nào sẽ frontend của bạn biết về bất kỳ sự thay đổi? – ygesher
@jegesh Tôi đã cài đặt nhưng không có sự khác biệt nào –
Tôi có hiểu chính xác rằng bạn muốn chuyển đổi số thông báo thành '' nhấp chuột không? Hay bạn muốn nó thay đổi ngay cả khi người dùng không làm bất cứ điều gì, nhưng có xuất hiện một thông báo cho anh ta? Hiện tại, mã của bạn sẽ kiểm tra xem có thông báo nào không khi người dùng nhấp vào liên kết. Nếu bạn muốn liên tục kiểm tra xem có thông báo nào cho người dùng hay không, hãy xem xét sử dụng 'setInterval()' sẽ thực hiện yêu cầu ajax mỗi X giây. – iulian