Создание динамического всплывающего окна для комментариев Disqus для разных потоков
Изменить: Кажется, Disqus использует URL текущей страницы в качестве идентификатора потока комментариев, несмотря на то, что я был явным и заявляя:
<script type="text/javascript">
var disqus_developer = 1;
var disqus_identifier = "@Model.UniqueThreadIdentifier"; <--- HERE
var disqus_shortname = 'foo';
/* * * DON'T EDIT BELOW THIS LINE * * */
(function () {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
Читайте ниже для более подробной информации.
Disqus говорит, что я могу идентифицировать "страницу" с уникальным идентификатором.
Сейчас на этой конкретной странице есть около 10 пунктов, и я бы хотел, чтобы у каждого элемента была личная ветка обсуждения Disqus.
Итак, вот фактическая страница, которая загружается:
@foreach (var strong in Model.StrongAgainst)
{
<div class="pick">
<div class="actions">
<a href="#modalDialogue" data-toggle="modal"
id="@strong.UniqueThreadIdentifier" class="btn btn-comment">
<i class="icon-comment"></i>
999
</a>
</div>
</div>
</div>
}
Тот @UniqueThreadIdentifier
это то, что я использую, чтобы позволить Disqus загрузить соответствующий поток.
Затем, в том же представлении HTML, у меня есть строка Javascript, которая с помощью UniqueIdentifier возвращает PartialView с соответствующей конфигурацией Disqus и HTML:
<script type="text/javascript" language="javascript">
$(document).ready(function () {
$(document).on("click", "#strong-against .pick .data .actions .btn-comment", function () {
var commentUniqueVar = $(this).attr("id");
$.ajax({
url: '/Counterpicks/GetCommentThread',
data: { uniqueidentifier: commentUniqueVar },
success: function (data) {
$('#strongAgainstCommentModal').html(data);
alert("Finished loading.");
}
});
});
});
</script>
И до сих пор это на 100% подтверждает, что в HTML загружаются правильные значения.
Вот PartialView:
<div class="modal-body">
<div id="disqus_thread">
</div>
<script type="text/javascript">
var disqus_developer = 1;
var disqus_identifier = "@Model.UniqueThreadIdentifier";
var disqus_shortname = 'foobar';
/* * * DON'T EDIT BELOW THIS LINE * * */
(function () {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
<noscript>
Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments
powered by Disqus.</a></noscript>
<a href="http://disqus.com" class="dsq-brlink">blog comments powered by <span class="logo-disqus">
Disqus</span></a>
</div>
Обратите внимание, как я установил disqus_identifier
используя строго типизированную модель с правильным значением.
Мое единственное предположение, что при объявлении такой переменной она создается глобально? (Я думаю?) И библиотека JavaScript Disque всегда будет использовать первое значение, которое я ей присвоил. Правильный?
Как правильно загрузить правильный идентификатор в библиотеку JavaScript Disqus?
1 ответ
Идентификатор позволяет вам отображать одну и ту же ветку на нескольких URL, но вы не можете отображать несколько нитей на одном и том же URL, используя только новый идентификатор (это распространенное заблуждение). Мы разработали метод для перезагрузки потока с помощью AJAX под названием Disqus.Reset, который описан здесь: http://docs.disqus.com/help/85/
Вы также можете взломать его без Disqus.Reset, и это продемонстрировано в этом посте: http://collaborable.com/blog/disqus-jquery-hack-awesome-ux