1

编辑:似乎 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 返回一个带有适当 Disqus 配置和 HTML 的 PartialView:

<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 中。

这是部分视图:

<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使用具有正确值的强类型模型。

我唯一的猜测是,当声明这样的变量时,它是全局创建的吗?(我认为?)Disque javascript 库总是会使用我分配给它的第一个值。正确的?

如何将正确的标识符正确加载到 Disqus javascript 库?

4

1 回答 1

0

标识符允许您在多个 URL 上显示同一个线程,但您不能单独使用新标识符在同一个 URL 上显示多个线程(这是一个常见的误解)。我们开发了一种使用 AJAX 重新加载线程的方法,称为 Disqus.Reset,记录在这里:http ://docs.disqus.com/help/85/

你也可以在没有 Disqus.Reset 的情况下破解它,这在这篇文章中得到了证明:http: //collaborable.com/blog/disqus-jquery-hack-awesome-ux

于 2012-05-02T20:09:10.230 回答