解决pjax无刷新加载页面与多说评论插件之间的兼容问题!
首页 > 后端开发   作者: 凌波  2016-9-12 21:18:40  热度:6070°  字号:   评论:
时间:2016-9-12 21:18:40   热度:6070°  评论:  

又陷入不着调的敲代码时光(虽然有时会有点废寝忘食,不过觉得还是很享受这个过程),再剩下仅有的时间里快马加鞭的升值自己的能力,对,我就是这样的现实,这样的实在,没有能力,即使能有个再大的再NB的“空壳子”(标签)等你去拿,我始终觉得浑身不那么痛快,在这“大是大非”的处境下,我始终觉得一切违反“顺其自然”的动作,终究有它消亡的一天!

那这两天又收获了哪些呢!然而这次焦点转到了前端,在前端遇到棘手的问题比较多,由于这次要实现站内搜索,所以需要对前台主题做一些整改,这个主题是基于emblog博客系统的,自己手动“移植”成静态版本,起初是删除了这个主题的pjax页面无刷新加载的,前段时间把这个功能加上了,当时也与前端等一些其他插件纠缠了大半天,主要时间还是与多说评论插件上的捣腾,最后勉强把它们之间的兼容关系捣腾利索,不过还是存在一些很细微的bug,不过不影响整体,就暂且没去管它。正好这次整改,少不了又要与pjax、多说评论插件它们掐上,那就借此把它们一网打尽吧!

解决这次pjax加载页面,花了不少时间,要想用pjax加载站内万博最新官网是多少检索,而它是个表单提交动作,不再是个a选择器的点击动作,那pjax默认的那个json配置项不再适用这个表达提交动作了,那就得另注册其它事件,查了资料之后,就是正如所料的submit事件,这时出来了一个新梗,不知为何自己下载的那个pjax包,没有那个submit事件,后来打开主题里的pjax包,它里面有这个事件,最后更换了这个包,经过测试,表单提交能实现pjax加载页面了,甚是开心!

绑定a标签的点击使用pjax加载(pjax内部默认已经注册):

$(document).pjax('a[target!=_blank]', '#contentleft', {fragment:'#contentleft', timeout: 6000});
//内部默认注册的代码
function fnPjax(selector, container, options) {
  var context = this
  return this.on('click.pjax', selector, function (event) {
    var opts = $.extend({}, optionsFor(container, options))
    if (!opts.container)
      opts.container = $(this).attr('data-pjax') || context
    handleClick(event, "#contentleft", opts)
  })
}

绑定submit动作对象使用pjax加载:

$(document).on("submit", "form", "button", function(a) {
 $.pjax.submit(a, "#contentleft", {
  fragment: "#contentleft",
  timeout: 6000
 })
    });

接着后面完善pjax与多说插件之间的问题,主要还是与加载多说评论数之间的问题,pjax是基于ajax的一层封装,当然加载评论数加载就没一般请求获取的那么方便了,官网也给出了ajax加载评论信息的例子,上次在实现pjax技术时也已经弄好了,那就不用在捣腾如何加载评论信息了,只需做好pjax加载前与加载后的全局事件的控制就好了,自己统一在子页面定义pjaxEnd函数,里面封装当前子页面在页面加载完成后(也就是pjax加载完成后)所要执行的页面初始化的一些代码(比如ajax加载多说评论信息),然后这个pjaxEnd函数放在pjax:complete事件里调用,最后处理下之前遗留的小问题,就基本上完工了!

       ajax加载多说评论数的部分代码:

  <script>var duoshuoQuery = { short_name: "lingboblog" };</script>
<script src="http://static.duoshuo.com/embed.js"></script>
             <script type="text/javascript"> 
                 function pjaxEnd() {
                     $('pre').addClass('prettyprint linenums').attr('style', 'overflow:auto');
                     window.prettyPrint && prettyPrint();

                     var el = document.createElement('div');//该div不需要设置class="ds-thread"
                     el.setAttribute('data-thread-key', @Model.Aid);//必选参数
                     el.setAttribute('data-url', 'http://@ViewBag.Url@Url.Action("Post", "Article", new { id = Model.Aid })');//必选参数
                     el.setAttribute('data-author-key', '1');//可选参数
                     DUOSHUO.EmbedThread(el);
                     jQuery('#comments').empty().append(el).show(500);
                     //ajax请求加载评论数
                     $.getJSON(
                         "http://api.duoshuo.com/threads/counts.jsonp?short_name=lingboblog&threads=@Model.Aid&callback=?",
                         function (dataduoshuo) {
                           
                             $.each(dataduoshuo.response, function (i, item) {
                                 $('#duoshuo').text(item.comments);
                                 $('#duoshuo1').text(item.comments);
                             });
                          
                         });
                 }
                 </script>

很棒,对pjax又进一步的认识!

 您阅读这篇文章共花了: 
捐赠支持:如果觉得这篇文章对您有帮助,请“扫一扫”鼓励作者!
二维码加载中...
本文作者: 凌波      文章标题: 解决pjax无刷新加载页面与多说评论插件之间的兼容问题!
本文地址:http://www.lingbohome.com/Article/Post/28
版权声明:若无注明,本文皆为“凌波小屋”原创,转载请保留文章出处。

发表吐槽

返回顶部    首页    大事记   动态    捐赠支持    后花园   
版权所有:Copyright ©2016 凌波小屋 All rights All rights reserved    站长: 凌波       程序:.Net Mvc   鄂ICP备 15003636号-1