构建基于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
构建基于Javascript的移动CMS——生成博客(二).路由的更多相关文章
- Essay3.0发布,基于JavaScript的前后端同构博客系统
前言 转眼间距离我开源这个项目已经两年了,最初是奔着学习的目的开发了这个项目,后来一直记录自己的学习笔记.随着时间的增长,发现之前写的代码简直不忍直视,于是就有了重构的想法.这个过程有些漫长,竟然用了 ...
- 构建基于Javascript的移动CMS——加入滑动
在和几个有兴趣做移动CMS的小伙伴讨论了一番之后,我们认为当前比較重要的便是统一一下RESTful API.然而近期持续断网中,又遭遇了一次停电,暂停了对API的思考.在周末无聊的时光了看了<人 ...
- 构建基于Javascript的移动web CMS——模板
在上一篇<构建基于Javascript的移动CMS--Hello,World>讲述了墨颀 CMS的大概组成,并进行了一个简单的演示样例,即Hello,World.这一次,我们将把CMS简单 ...
- 构建基于Javascript的移动web CMS——Hello,World
在一篇构建基于Javascript的移动web CMS入门--简单介绍中简单的介绍了关于墨颀CMS的一些原理,其极框架组成.于是開始接着应该说明一下这个CMS是怎样一步步搭建起来. RequireJS ...
- 基于 Hexo + GitHub Pages 搭建个人博客(一)
前言:我的博客写作之路 15 年刚上大学,第一次接触公众号,就萌生了创建一个公众号写点东西,但最终不了了之. 很快到了 16 年,开始接触网上各大博客网站,接触最多的当属 CSDN,萌生了注册一个博客 ...
- 基于 Hexo + GitHub Pages 搭建个人博客(二)
在 基于 Hexo + GitHub Pages 搭建个人博客(一) 这篇文章中,我们已经知道如何使用 Hexo + GitHub Pages 搭建一个个人博客,GitHub 为我们提供了免费的域名和 ...
- 基于 Hexo + GitHub Pages 搭建个人博客(三)
一.添加扫描二维码关注功能 打开 themes 目录下的 next 主题配置文件,找到 Wechat Subscriber 标签,将该标签下的配置改成如下形式: # Wechat Subscriber ...
- 基于Hexo+Github Pages搭建的博客
概念 Github Pages可以被认为是用户编写的.托管在github上的静态网页.使用Github Pages可以为你提供一个免费的服务器,免去了自己搭建服务器和写数据库的麻烦.此外还可以绑定自己 ...
- 基于SMB协议的共享文件读写 博客分类: Java
基于SMB协议的共享文件读写 博客分类: Java 一.SMB协议 SMB协议是基于TCP-NETBIOS下的,一般端口使用为139,445. 服务器信息块(SMB)协议是一种IBM协议,用于在计 ...
随机推荐
- k8s 安装并试用Istio service mesh
本文根据官网的文档整理而成,步骤包括安装istio 0.5.1并创建一个bookinfo的微服务来测试istio的功能. 文中使用的yaml文件可以在kubernetes-handbook的manif ...
- mysql 从库落后主库太多优化
有时候为了避免master.info和中继日志崩溃,在容忍额外的fsync()带来的开销,推荐设置sync_master_info = 1sync_relay_log = 1sync_relay_lo ...
- 机器学习——SVM讲解
支持向量机(Support Vector Machine) SVM是一类按监督学习方式对数据进行二元分类的广义线性分类器,决策边界是对学习样本求解的最大边距超平面.只需要知道,SVM是一个有监督的分类 ...
- LeetCode Weekly Contest 24
1, 543. Diameter of Binary Tree 维护左右子树的高度,同时更新结果,返回以该节点结束的最大长度.递归调用. /** * Definition for a binary t ...
- 如何修改 WordPress 数据库前缀
我们知道 WordPress 的数据库表,可以设置前缀,默认是 wp_,很多同学也就默认用了 wp_,如果某种原因(比如提高安全性)要修改的 WordPress 数据的前缀,我们应该怎么做? 开始之前 ...
- 有关Gradle Network is unreachable: connect的报错
项目Gradle Errer:Network is unreachable: connect 同时还有as的 报错 Internal HTTP server disabled: Cannot st ...
- NYOJ心急的C小加——贪心
这个题会联想到拦截导弹的题目http://codevs.cn/problem/1044/ 首先用动态规划,利用Dilworth定理解题,然而超时了(╥╯^╰╥) 关于Dilworth定理,我的理解: ...
- 【Oracle】手工建库启动到nomount状态时错误ORA-09925,ORA-01017
配置好pfile和口令文件后启动数据库到nomount状态下出现错误: [oracle@localhost ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2 ...
- 用来生成get set string 方法
https://projectlombok.org/ 主要是用来生成get set string 方法等等 原理是注解
- 三维重建:深度相机方案对比-KinectFusion的基本原理(尺度)
算法原理请参考此文: kinect fusion 3D重建基本算法 http://log.csdn.net/xiaohu50/article/details/51592503 三维重建为三维空间实 ...