`
flex_莫冲
  • 浏览: 1092039 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

backbone 的delegateEvent用法

阅读更多
這篇文章記錄關於 Backbone delegateEvents(), 也許會用到。

假設我們有一段已知的 HTML template:

/* main.html */
<script type="text/template" id="test-tmpl">
  <div>
     <button type="button">Click!</button>
  </div>
</script>
而我們會針對它製作 Backbone View 並且在其中指定 event handling:

/* ClickBtn.js */
var ClickBtn = Backbone.View.extend({
  el: $("test-tmpl"),
  render: function(){
    $("body").append(this.el));

  },
  events: {
    'click button': 'clickAlert'
  },
  clickAlert: function(){
    alert("Hello world!");
  }
});
el: 將HTML template目標選取起來

render: 將HTML template append 到 body

events: 指定event type, 目標(即button) 和 event handling function(即clickAlert)

以上即完成一個基本的 View 和其中所綁定的 event。 實際使用看看:

/* main.html */
<script type="text/template" id="test-tmpl">
  <div>
     <button type="button">Click!</button>
  </div>
</script>
<script src="ClickBtn.js"></script>
<script type="text/javascript">
  var clickBtn = new ClickBtn();
  clickBtn.render();
</script>
以上可以很順利的實作出來, 這段實作如果每次需要 new 一個 ClickBtn, 它都會固定去選取 id="test-tmpl" 這個 HTML template來呈現。試想另一種需求: 如果我們想指定特定的 HTML template 給 ClickBtn 去呈現 UI 呢? 很直覺會這樣做:

/* main.html */
<script type="text/template" id="test-tmpl">
  <div>
     <button type="button">Click!</button>
  </div>
</script>
<script src="ClickBtn.js"></script>
<script type="text/javascript">
  var clickBtn = new ClickBtn({selector: "#test-tmpl"});
  clickBtn.render();
</script>
在 new ClickBtn 時, 多傳一個 selector 來指定 HTML template 的位置, 而 ClickBtn.js 要修改成:

/* ClickBtn.js */
var ClickBtn = Backbone.View.extend({
  //el: $("test-tmpl"),
  initialize: function(attrs){
    this.el = $(attrs.selector);
  },
  render: function(){
    $("body").append(this.el));
  },
  events: {
    'click button': 'clickAlert'
  },
  clickAlert: function(){
    alert("Hello world!");
  }
});
el 這時候只能在initialize裡被指定, 可是這會發生一個問題, 如果你去點 button, 它並不會如預期的跳出 alert 視窗, 也就是 event 並沒有被 binding  到 DOM 上面。原因是 el 並沒有在 new ClickBtn 的時候第一時間產生, 解決方法是必須在initialize中再次呼叫Backbone 內建的 method: delegateEvents(), 作用是再 binding 一次:

/* ClickBtn.js */
var ClickBtn = Backbone.View.extend({
  //el: $("test-tmpl"),
  initialize: function(attrs){
    this.el = $(attrs.selector);
    this.delegateEvents();
  },
  render: function(){
    $("body").append(this.el));
  },
  events: {
    'click button': 'clickAlert'
  },
  clickAlert: function(){
    alert("Hello world!");
  }
});
(2012/12/16 update) 在Backbone 0.9版中,因為 delegateEvents() 的實做有改變,所以要將 this.el 改寫成 this.$el,如下


/* ClickBtn.js */
var ClickBtn = Backbone.View.extend({
  //el: $("test-tmpl"),
  initialize: function(attrs){
    this.$el = $(attrs.selector);  // for Backbone.js 0.9+
    this.delegateEvents();
  },
  render: function(){
    $("body").append(this.$el));
  },
  events: {
    'click button': 'clickAlert'
  },
  clickAlert: function(){
    alert("Hello world!");
  }
});
分享到:
评论

相关推荐

    前端项目-backbone.eventbinder.zip

    在前端开发领域,Backbone.js 是一款非常流行的轻量级框架,它为构建复杂的JavaScript应用程序...通过深入研究"backbone.eventbinder-master"中的源码和示例,我们可以更好地掌握其用法,并将其应用于实际的项目中。

    BackBone介绍及使用

    Backbone与其他工具如jQuery、Underscore.js(提供实用函数库)、Handlebars(模板引擎)等配合使用,可以构建出功能强大的Web应用。例如,Underscore.js的模板功能可以让视图渲染更高效,而jQuery则简化了DOM操作。...

    Java 演示 backbone 基本用法

    这个"Java演示Backbone基本用法"的主题,虽然标题中有"Java",但实际上Backbone.js是与JavaScript紧密相关的,而非Java语言。它提供了一种结构化的框架,帮助开发者组织和管理前端代码,尤其是对于那些基于Model-...

    backbone-eventbinder-1.0.0.jar

    官方版本,亲测可用

    Backbone.js(1.1.2) API中文文档.zip Backbone.js离线文档

    解压提供的"Backbone.js API中文文档.zip"后,你会得到一个HTML文档,里面详细介绍了每个组件的用法、方法、事件和属性。通过阅读这份文档,你可以了解如何创建模型、视图、集合和路由器,以及如何使用Backbone....

    BACKBONE.JS应用程序开发

    , 《backbone.js应用程序开发》详细介绍了如何使用backbone.js完成web应用开发。全书从了解mvc、spa和backbone.js的基本知识开始,然后着手构建3个示例应用程序;此外,backbone和grunt-bbb、jquery mobile等开发...

    backbone整合require例子

    **标题解析:** "backbone整合require例子" 这个标题表明我们将讨论如何将Backbone.js框架与RequireJS模块加载器结合使用。Backbone.js是一个轻量级的JavaScript库,用于构建可维护的前端应用程序,而RequireJS则是...

    backbone 资料

    使用这些资料,你可以深入理解Backbone的各个方面,包括如何创建Model、View、Collection和Router,以及如何利用Backbone的事件系统来实现数据的双向绑定。通过学习和实践,你将能够更好地运用Backbone来构建结构...

    backbone.js underscore.js

    Backbone.js 和 Underscore.js 是两个在JavaScript开发中广泛使用的库,它们为构建复杂的Web应用程序提供了强大的工具。这两个库都是基于jQuery库,其中jQuery-1.10.2.js是jQuery的一个版本,它为DOM操作、事件处理...

    Backbone 文档

    "backbone-localstorage.js"是Backbone的一个插件,它扩展了Backbone.Model和Backbone.Collection,使它们能够使用浏览器的本地存储(localStorage)来持久化数据。这意味着即使页面刷新,数据也能被保存下来。 ...

    backbone官方Todo示例_修正

    "backbone官方Todo示例_修正"是一个很好的学习资源,它演示了如何使用Backbone.js来构建一个简单的待办事项管理应用。 1. **模型(Model)**:在Backbone中,模型是应用程序数据的核心,通常对应于服务器上的JSON对象...

    透过源码学前端 之 Backbone 一

    可能包含的内容有对Model、View或Event系统的解析,讲解它们的基本结构、核心方法以及如何使用。通过对这部分源码的学习,我们可以理解Backbone是如何实现数据绑定、事件监听以及视图更新等功能的。 总之,学习...

    backbone-boilerplate, 一组用于构建 backbone.js 应用程序的最佳实践和实用工具.zip

    backbone-boilerplate, 一组用于构建 backbone.js 应用程序的最佳实践和实用工具 Backbone 模板这个样板是许多研究和挫折的产物。 现有的boilerplates修改 Backbone 核心,没有构建过程,或者者是非常规范的,这样的...

    backbone文档

    在【标题】"backbone文档"和【描述】中,我们可以看到Backbone.js的热度逐年上升,说明越来越多的开发者开始关注并使用它。Backbone.js的核心在于提供了一种结构化的前端开发方式,避免了仅依赖jQuery或MooTools等库...

    backbone教程

    使用Backbone.js和jQuery实现一个可编辑的员工信息表格。功能包括: 1. 录入员工信息 2. 删除员工信息 3. 双击表格可对员工信息进行修改 4. 能对员工信息进行有效性校验 5. 能对员工信息进行持久化 设计: * 用...

    backbone_api_frame

    Backbone_API_frame是一个基于Backbone.js和ExtJS开发的API框架,主要目的是为了提供一个高效、结构化的Web应用开发解决方案。这个框架结合了Backbone.js的模型-视图-控制器(MVC)架构和ExtJS的组件化能力,旨在...

    backbone 实例

    Model包含数据和业务逻辑,提供get、set、save等方法来操作数据。例如: ```javascript var User = Backbone.Model.extend({ defaults: { name: "未命名", age: 0 } }); var user = new User(); user.set({...

    用Backbone.js写的小项目

    通过这个小项目,你可以掌握Backbone.js的基础用法,了解如何在实际项目中运用MVC模式来构建前端应用,并提升对前端状态管理和数据流控制的理解。同时,这也是一个很好的起点,进一步探索前端框架如React、Vue或...

    Backbone.js开发秘笈源码

    - **README.txt**:这个文件通常包含了项目的简介、安装指南、使用方法和开发者注意事项。对于Backbone.js的学习者来说,它可能包含了一些示例代码的解释和如何运行这些代码的提示。 - **Code**:这是一个目录,...

Global site tag (gtag.js) - Google Analytics