zoukankan      html  css  js  c++  java
  • 构建基于Javascript的移动CMS——生成博客(二).路由

    在有了上部分的基础之后。我们就能够生成一个博客的内容——BlogPosts Detail。这样就完毕了我们这个移动CMS的差点儿基本的功能了,有了上节想必对于我们来说要获取一个文章已经不是一件难的事情了。

    获取每篇博客

    于是我们照猫画虎地写了一个BlogDetail.js

    define([
        'jquery',
        'underscore',
        'mustache',
        'text!/blog_details.html'
    ],function($, _, Mustache, blogDetailsTemplate){
    
        var BlogPostModel = Backbone.Model.extend({
            name: 'Blog Posts',
            url: function(){
                return this.instanceUrl;
            },
            initialize: function(props){
                this.instanceUrl = props;
            }
        });
    
        var BlogDetailView = Backbone.View.extend ({
            el: $("#content"),
    
            initialize: function () {
            },
    
            getBlog: function(slug) {
                url = "http://api.phodal.net/blog/" + slug;
                var that = this;
                collection = new BlogPostModel;
                collection.initialize(url);
                collection.fetch({
                    success: function(collection, response){
                        that.render(response);
                    }
                });
            },
    
            render: function(response){
                this.$el.html(Mustache.to_html(blogDetailsTemplate, response));
            }
        });
    
        return BlogDetailView;
    });

    又写了一个blog_details.html。然后。然后

    <div class="information pure-g">
        {{#.}}
        <div class="pure-u-1 ">
            <div class="l-box">
                <h3 class="information-head"><a href="#/blog/{{slug}}" alt="{{title}}">{{title}}</a></h3>
                <p>
                    公布时间:<span>{{created}}</span>
                <p>
                    {{{content}}}
                </p>
    
                </p>
            </div>
        </div>
        {{/.}}
    </div>

    我们显然须要略微地改动一下之前blog.html的模板。为了让他能够在前台跳转

    {{#.}}
    <h2><a href="#/{{slug}}" alt="{{title}}">{{title}}</a></h2>
    <p>{{description}}</p>
    {{/.}}

    问题出现了,我们如何才干进入最后的页面?

    加入博文的路由

    在上一篇结束之后,每一个博文都有相应的URL,即有相应的slug。而我们的博客的获取就是依据这个URL,获取的,换句话说,这些事情都是由API在做的。这里所要做的便是,获取博客的内容,再render。这当中又有一个问题是ajax运行的数据无法从外部取出。于是就有了上面的getBlog()调用render的方法。

    Backbone路由參数

    我们须要传进一个參数,以便告诉BlogDetail须要获取哪一篇博文。

        routes: {
            'index': 'homePage',
            'blog/*slug': 'blog',
            '*actions': 'homePage'
        }

    *slug便是这里的參数的内容,接着我们须要调用getBlog(slug)对其进行处理。

    app_router.on('route:blog', function(blogSlug){
            var blogDetailsView = new BlogDetail();
            blogDetailsView.getBlog(blogSlug);
        });

    最后,我们的router.js的内容例如以下所看到的:

    define([
        'jquery',
        'underscore',
        'backbone',
        'HomeView',
        'BlogDetail'
    ], function($, _, Backbone, HomeView, BlogDetail) {
    
        var AppRouter = Backbone.Router.extend({
            routes: {
                'index': 'homePage',
                'blog/*slug': 'blog',
                '*actions': 'homePage'
            }
        });
        var initialize = function() {
            var app_router = new AppRouter;
    
            app_router.on('route:homePage', function() {
                var homeView = new HomeView();
                homeView.render();
            });
    
            app_router.on('route:blog', function(blogSlug){
                var blogDetailsView = new BlogDetail();
                blogDetailsView.getBlog(blogSlug);
            });
    
            Backbone.history.start();
        };
        return {
            initialize: initialize
        };
    });

    接着我们便能够非常愉快地打开每一篇博客查看里面的内容了。

    其它

    CMS效果: 墨颀 CMS

    QQ讨论群: 344271543

    项目: https://github.com/gmszone/moqi.mobi

  • 相关阅读:
    C#事件(event)解析
    dll加入到GAC后,如何方便的调试
    『C程序设计』读书笔记系列文章之第四章 逻辑运算和判断选取控制
    C#委托之个人理解
    虚方法(virtual)和抽象方法(abstract)的区别
    『C程序设计』读书笔记系列文章之第二章 数据类型、运算符与表达式
    SOA概览(转)
    今天学的几个有用的句型
    【老孙随笔】PPT高手的启示
    【项目经理之修炼(11)】《初级篇》什么样的项目经理才可能成功??
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/6985267.html
Copyright © 2011-2022 走看看