在有了上部分的基础之后。我们就能够生成一个博客的内容——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

构建基于Javascript的移动CMS——生成博客(二).路由的更多相关文章

  1. Essay3.0发布,基于JavaScript的前后端同构博客系统

    前言 转眼间距离我开源这个项目已经两年了,最初是奔着学习的目的开发了这个项目,后来一直记录自己的学习笔记.随着时间的增长,发现之前写的代码简直不忍直视,于是就有了重构的想法.这个过程有些漫长,竟然用了 ...

  2. 构建基于Javascript的移动CMS——加入滑动

    在和几个有兴趣做移动CMS的小伙伴讨论了一番之后,我们认为当前比較重要的便是统一一下RESTful API.然而近期持续断网中,又遭遇了一次停电,暂停了对API的思考.在周末无聊的时光了看了<人 ...

  3. 构建基于Javascript的移动web CMS——模板

    在上一篇<构建基于Javascript的移动CMS--Hello,World>讲述了墨颀 CMS的大概组成,并进行了一个简单的演示样例,即Hello,World.这一次,我们将把CMS简单 ...

  4. 构建基于Javascript的移动web CMS——Hello,World

    在一篇构建基于Javascript的移动web CMS入门--简单介绍中简单的介绍了关于墨颀CMS的一些原理,其极框架组成.于是開始接着应该说明一下这个CMS是怎样一步步搭建起来. RequireJS ...

  5. 基于 Hexo + GitHub Pages 搭建个人博客(一)

    前言:我的博客写作之路 15 年刚上大学,第一次接触公众号,就萌生了创建一个公众号写点东西,但最终不了了之. 很快到了 16 年,开始接触网上各大博客网站,接触最多的当属 CSDN,萌生了注册一个博客 ...

  6. 基于 Hexo + GitHub Pages 搭建个人博客(二)

    在 基于 Hexo + GitHub Pages 搭建个人博客(一) 这篇文章中,我们已经知道如何使用 Hexo + GitHub Pages 搭建一个个人博客,GitHub 为我们提供了免费的域名和 ...

  7. 基于 Hexo + GitHub Pages 搭建个人博客(三)

    一.添加扫描二维码关注功能 打开 themes 目录下的 next 主题配置文件,找到 Wechat Subscriber 标签,将该标签下的配置改成如下形式: # Wechat Subscriber ...

  8. 基于Hexo+Github Pages搭建的博客

    概念 Github Pages可以被认为是用户编写的.托管在github上的静态网页.使用Github Pages可以为你提供一个免费的服务器,免去了自己搭建服务器和写数据库的麻烦.此外还可以绑定自己 ...

  9. 基于SMB协议的共享文件读写 博客分类: Java

    基于SMB协议的共享文件读写 博客分类: Java   一.SMB协议 SMB协议是基于TCP-NETBIOS下的,一般端口使用为139,445. 服务器信息块(SMB)协议是一种IBM协议,用于在计 ...

随机推荐

  1. [牛客挑战赛 30D] 小A的昆特牌 解题报告 (组合数学)

    interlinkage: https://ac.nowcoder.com/acm/contest/375/D description: solution: 我们枚举步兵的数量$x$,还剩下$S-x$ ...

  2. js作业

    1.一张纸的厚度是0.0001米,将纸对折,对折多少次厚度超过珠峰高度8848米var sum=0;i=0;a=0.0001;for(i=0;i<100;i++){ a=a*2; sum=sum ...

  3. NSKeyedUnarchiver归档

    把自定义的类对象编码到NSData中 NSData *data = [NSKeyedArchiver archivedDataWithRootObject:bc];//归档,bc是一个自定义的类对象, ...

  4. SEO规范(部分)

    1:尽量减少AJAX的使用搜索引擎无法检索ajax中的内容,也无法识别javascript代码. 2:拒绝iframe,frame标签iframe,frame会极大的阻碍搜索引擎爬取网站内容. 3:图 ...

  5. JavaScript实现网页换肤

    <html> <head> <meta charset="utf-8"> <title>无标题文档</title> &l ...

  6. 查询 MySQL 库/表相关信息

    SHOW DATABASES //列出 MySQL Server 数据库. SHOW TABLES [FROM db_name] //列出数据库数据表. SHOW CREATE TABLES tbl_ ...

  7. Python 中文注释报错解决方法

    代码中一旦有了中文注释便会报错. 原因 如果文件里有非ASCII字符,需要在第一行或第二行指定编码声明. 解决方法 在第一行或是第二行加入这么一句# -- coding: utf-8 -- 完美解决

  8. C# 分割URL地址

    public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_C ...

  9. 应用二:Vue之ElementUI Form表单校验

    (注:本文适用于有一定Vue基础或开发经验的读者,文章就知识点的讲解不一定全面,但却是开发过程中很实用的)   表单校验是前端开发过程中最常用到的功能之一,根据个人的工作经验总结在此对表单校验功能的基 ...

  10. PhotoZoom Pro 7 支持哪些图像格式?

    PhotoZoom是一款新颖的.技术上具有革命性的对数码图片无损放大的工具.为设计工作者提供了优良的解决方案,可快速渲染出完美的放大照片,呈现无与伦比的画质效果.将因其应用的广泛性,所以对图像文件的支 ...