2014/08/11 – Backbonejs

[来自: Backbone.js 开发秘笈 第6章]

Template 用法:

通过 Underscore.js 提供的 _.template() 方法,我们可使用 <% ... %> 包含js代码;使用 <%= ... %> 输出变量值;使用 <%- ... %>输出转义后的变量值。

(function ($) {//define -------------------------var UserModel = Backbone.Model.extend();var UserCollection = Backbone.Collection.extend({model: UserModel});var UsersView = Backbone.View.extend({tagName: 'ul',//用默认 Underscore 的 _.template() 方法定义模板template: _.template("<% _.each(users,function(user){%>" +"<li><a hre='javascript:;' data-id='<%= user.id %>'><%= user.name %></a></li>"+ "<%}); %>"),render: function () {//调用模板对象获取生成的 HTML$(this.el).html(this.template({users: this.collection.toJSON()}));return this;}});//instance -----------------------------var usersView = new UsersView({collection: new UserCollection([{ id: 1, name: 'yoyo' },{ id: 7, name: 'ronaldo' },{ id: 4, name: 'ramos' }])});//apply -------------------------------$(function () {$('body').html(usersView.render().el);});})(jQuery);

1. 模板加载器

模板元素:<script type="text/template" id="userTemplate">...</script>

(function ($, win, undefined) {$(function () {//define -------------------------------------------------------var $templates = {};$("script[type='text/template']").each(function () {$templates[$(this).attr('id')] = _.template($(this).html());$(this).remove();});$.tempates = $.tempates || $templates;//apply ---------------------------------------------------------$('body').html("<ul>" + $.tempates.userTemplate({ id: 1, name: 'yoyo' }) + "</ul>");});
})(jQuery, window);

View Code

2. 使用 Mustache 模板

(function ($) {//依赖 mustache.js//https://github.com/janl/mustache.js//define -----------------------------var UserModel = Backbone.Model.extend();var UserCollection = Backbone.Collection.extend({ model: UserModel });var UsersView = Backbone.View.extend({tagName: 'ul',template: "{{# users }}<li><a href='javascript:;' data-id='{{ id }}'>{{ name }}</a></li>{{/ users }}",render: function () {//Mustache.render() 方法先把定义的模板字符串编译成 js 代码执行。{{ ... }} 占位符会被传入的参数二的属性所替代。/* 预编译模板template : Mustache.compile([string template])this.template([options]);*//* 模板部件string tmplate :"{{> user }}"Mustache.render([string template], [options], {user: [string userTemplate]}) orMustache.compilePartial("user",[string userTemplate])*/$(this.el).html(Mustache.render(this.template, { users: this.collection.toJSON() }));return this;}});//instance ----------------------------var usersView = new UsersView({collection: new UserCollection([{ id: 1, name: "yoyo" },{ id: 4, name: "ramos" },{ id: 7, name: "ronaldo" }])});$(function () {//apply-------------------------------$("body").html(usersView.render().el);});
})(jQuery);

View Code

3. 定义表单

(function ($) {//依赖 backbone.forms.js//https://github.com/powmedia/backbone-forms//define -----------------------------------var UserModel = Backbone.Model.extend({schema: {title: {type: "Select",options: ["Mr", "Mrs", "Ms"]},name: "Text",email: {//验证器数组 [可保护字符串,对象,正则,函数]/* 当 form.validate() or form.commit() 方法被调用时会触发 *//* 重写内置验证提示信息 [可使用Mustache 标签]Backbone.Form.validators.errMessages.required/.match/.emial = '';*//* 对模型进行验证Model.validate() 方法能够返回包含表单元素名称以及对应的错误提示消息的对象。*/validators: [{type: "required",message: "Email field is required"}, "email"]},birthday: "Date"}});var UserForm = Backbone.View.extend({tagName: "div",render: function () {/* Backbone.Form() 方法渲染出一个表单重写 render() 方法扩展 Backbone.View 对象,通过 Model.schema 创建表单。*/this.form = new Backbone.Form({ model: this.model });this.$el.html("<h3>Enter buyer details below</h3>");this.$el.append(this.form.render().el);this.$el.append("<input type='button' value='Submit' />");return this;},events: {"click input[type='button']": "submit"},submit: function () {//向 Model 赋值    [{validate: true} 验证值的有效性]/* 没有模型创建表单var form = new Backbone.Form({data:{},schema:{}}).render();*//* 获取表单值var date = this.form.getValue();*/this.form.commit({ validate: true });alert(JSON.stringify(this.model.toJSON()));}});//instance -------------------------var userFrom = new UserForm({model: new UserModel({title: "Mr",name: "YoYo",email: "yqx_vip@outlook.com",birthday: new Date("2/7/2012")})});$(function () {//apply ----------------------$("body").html(userFrom.render().el);});
})(jQuery);

View Code

4. 扩展表单,处理表单事件

(function ($) {//define ------------------------------var UserModel = Backbone.Model.extend({schema: {title: {type: "Select",options: ["Mr", "Mrs", "Ms"]},name: "Text",email: {validators: ["required", "email"]},birthday: "Date"}});var UserForm = Backbone.Form.extend({tagName: "div",initialize: function () {//调用父级方法/* Backbone.Form 扩展自 Backbone.Views, 并实现了 initialize 和 render 方法,需要调用 */UserForm.__super__.initialize.apply(this, arguments);//绑定元素事件this.on("name:blur", this.updateName);},render: function () {UserForm.__super__.render.apply(this, arguments);return this;},updateName: function (form, editor) {window.document.title = editor.previousValue;}});//instance -------------------------------var userForm = new UserForm({model: new UserModel({title: "Mr",name: "YoYo",email: "yqx_vip@outlook.com",birthday: new Date("2/7/2012")})});$(function () {//apply -----------------------------$("body").html(userForm.render().el);});
})(jQuery);

View Code

5. 使用 LayoutManager 布局

<script type="template" id="layout"><div id="divUsers"></div><div id="divUser"></div></script><script type="template" id="userDetailTemplate"><p><%= user.get('name') %></p></script><script type="template" id="usersTemplate"><ul><% users.each(function(user){ %><li><a href="#user/<%= user.get('id') %>"><%= user.get('name') %></a></li><% }); %></ul></script>

View Code

(function ($) {//依赖 backbone.layoutmanager.js//https://github.com/tbranyen/backbone.layoutmanager//define ------------------------var UserModel = Backbone.Model.extend({idAttribute: 'id'});var UserCollection = Backbone.Collection.extend({ model: UserModel });var UserView = Backbone.Layout.extend({template: "#userDetailTemplate",serialize: function () {return {user: this.model};}});var UsersView = Backbone.Layout.extend({template: '#usersTemplate',serialize: function () {return {users: _.chain(this.collection.models)};}});var Workspace = Backbone.Router.extend({routes: {"": "page","user/:id": "page"},initialize: function (options) {this.collection = options.collection;},page: function (id) {if (!id) {id = this.collection.at(0).id;}/* Backbone.LayoutManager 对象实现了模板加载器以及 rander() 方法 */var layout = new Backbone.Layout({el: "body",template: '#layout',//指定窗格绑定到的 HTML 元素
                views: {"#divUsers": new UsersView({collection: this.collection}),"#divUser": new UserView({model: this.collection.get(id)})}});layout.render();}});$(function () {//instance ----------------new Workspace({collection: new UserCollection([{ id: 1, name: "yoyo" },{ id: 4, name: "ramos" },{ id: 7, name: "ronaldo" }])});Backbone.history.start();});
})(jQuery);

View Code

6. 富表格

(function ($) {//依赖 backgrid.js and backgrid.css//selectAll 依赖 backgrid-select-all.js and backgrid-select-all.css//filter 依赖 backgrid-filter.js and backgrid-filter.css//http://backgridjs.com//define -----------------------------------var UserModel = Backbone.Model.extend();var UserCollection = Backbone.Collection.extend({ model: UserModel });$(function () {//instance -----------------------------var userCollection = new UserCollection([{ id: 1, name: "yoyo", age: new Date("3/12/1986").toString(), status: "male" },{ id: 4, name: "ramos", age: new Date("11/3/1983").toString(), status: "male" },{ id: 7, name: "ronaldo", age: new Date("1/1/1987").toString(), status: "male" }]);/* Backgrid.Grid 基于 Backbone.View 构建的 */var grid = new Backgrid.Grid({/* columns 表格列的定义信息 */columns: [{name: "",cell: "select-row",headerCell: "select-all"}, {name: 'id',//模型名称label: "ID",//列头标签editable: false,//是否编辑sortable: true,//是否排序cell: "number"//单元格类型 [datetime, date, time, number, integer, string, uri, email, boolean, select]
                }, {name: 'name',label: "Name",cell: "string"}, {name: 'age',label: "Age",cell: "date"}, {name: "status",label: "Status",cell: Backgrid.SelectCell.extend({//扩展类型累
                        optionValues: [["Male", "male"],["Female", "female"]]})}],collection: userCollection});//apply ----------------$("body").html(grid.render().el);$("body").append("<input type='button' value='delete' class='btnSelected' />");$("input.btnSelected").click(function () {_.each(grid.getSelectedModels(), function (model) {grid.collection.remove(model);//model.destroy();//call Backbone.sync
            });});//添加 filtervar elFilter = new Backgrid.Extension.ClientSideFilter({collection: userCollection,placeholder: "Search by Name",fields: ["name"],wait: 150});$("body").append(elFilter.render().el);});
})(jQuery);

View Code

posted on 2014-08-11 16:54 MSchina 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/yoyoone23/p/3905126.html

2014/08/11 – Backbonejs相关推荐

  1. 2014/08/13 – Backbonejs

    2014/08/13 – Backbonejs [来自: Backbone.js 开发秘笈 第7章] Restful 服务调用 Collection.fetch() - 请求集合 Model.save ...

  2. 计科专业c语言重修,关于2014年11月湖南工程学院非计算机专业学生计算机应用水平等级考试报名的通知...

    各教学院: 根据<关于做好2014年11月全省普通高等学校非计算机专业学生计算机应用水平等级考试组考工作的通知>(湘教办通[2014]170号)的文件精神,2014年下半年湖南省计算机应用 ...

  3. 【跃迁之路】【552天】程序员高效学习方法论探索系列(实验阶段309-2018.08.11)...

    @(跃迁之路)专栏 [跃迁之路]奖励金计划正式开始 从2018.7.1起,[跃迁之路]奖励金计划正式起航,从今以后,, 每月1日,我会将自己个人上月收入的1%计入[跃迁之路]奖励金池,积累到足够金额后 ...

  4. CSDN下载频道2014年11月4日本-5日常维护公告

    尊敬的用户: CSDN于2005年推出了下载服务.经过数年的发展.下载频道的用户已经为无数用户提供了帮助,分享500万的技术资源. CSDN下载频道将于2014年11月4日23点至11月5日8点进行积 ...

  5. [Leedcode][JAVA][面试题 08.11][硬币][动态规划]

    [问题描述] 面试题 08.11.硬币 硬币.给定数量不限的硬币,币值为25分.10分.5分和1分,编写代码计算n分有几种表示法.(结果可能会很大,你需要将结果模上1000000007)示例1:输入: ...

  6. 敏捷需求分析及深度提升(广州 2014.1.11)

    课程概述 无论你是做项目.做产品还是互联网,需求分析都是一个苦逼的事情!做项目的不知道客户想要什么,甚至客户自己也不知道想要什么!做产品和互联网的不知道潜在客户想要什么,不知道市场会有怎样的变化,只知 ...

  7. 我的log4net使用手册(转自 http://blog.csdn.net/lyjcn/archive/2009/08/11/4432833.aspx)

    1. log4net简介 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.Java平台下,它还 ...

  8. 吉林省高等学校计算机水平考试,关于2014年11月高等学校计算机水平考试(吉林省考区)报名的通知...

    各学院: 根据吉林省大学考试办公室有关通知,2014年下半年全国高等学校计算机水平考试(吉林省考区)定于2014年11月22日进行,本次考试统一实行机考.为确保考试顺利进行,学校定于2014年10月1 ...

  9. 《Unix/Linux网络日志分析与流量监控》2014年11月底出版

    2014年11月 <Unix/Linux网络日志分析与流量监控>重磅新书出版 近日,历时3年创作的75万字书稿已完成,本书目前正在出版社清样阶段即将出版发行.本书紧紧围绕网络安全的主题,对 ...

最新文章

  1. 仅支持BCH的众筹平台Coinfundr或能革新众筹业
  2. GPUImage混合滤镜处理图片
  3. Python_管理项目
  4. Java互联网架构-京东国美高并发核心技术“秒杀”
  5. 最大子数组和Python解法
  6. java 写入指定路径文件_java对指定目录下文件读写操作介绍 | 学步园
  7. HTML布局是外边距咋表示,布局 页面设置百分比 子元素如何设置外边距?
  8. oracle fm s,FM连接oracle出错的问题??
  9. 【编辑器】VScode+code runner+python3编译
  10. OSDev——GCC交叉编译器
  11. 缠中说禅形态挖掘之七笔形态
  12. U8 ActiveX 部件不能创建对象
  13. 大数据_湖仓一体:下一代存储解决方案
  14. python画高德地图
  15. MobileNetV2网络结构分析
  16. linux忘记root密码的解决办法
  17. ARM指令——跳转指令
  18. Linux内核设计与实现(1)第一章:Linux内核简介
  19. 微信最近点赞拿东西服务器,微信朋友圈点赞说明什么?点赞的行为背后隐藏着什么含义呢?...
  20. 超5亿中国人的熬夜大赏,快看有你吗?

热门文章

  1. 计算机网络—局域网的基本概念和体系结构
  2. 设系统中有三种类型的资源(A,B,C)的五个进程(P1,P2,P3,P4,P5)。A资源的数量为17,B资源的数量为5,C资源的数量为20。在T0时刻系统状态如表所示。
  3. 2018青岛ICPC ZOJ 4062: Plants vs. Zombies(二分)
  4. bzoj 3373: [Usaco2004 Mar]Lying Livestock 说谎的牲畜
  5. 一篇让你看懂卷积神经网络
  6. [paper reading] 译 + 注 :如何阅读 Research Papers(Andrew Ng)
  7. vscode 使用技巧(持续更新)
  8. Echarts数据可视化parallel平行坐标系,开发全解+完美注释
  9. Quartus17运行仿真RTL Simulation
  10. 贺利坚老师汇编课程53笔记:寄存器冲突问题解决方案定义子程序标准框架