`

JavaScriptMVC之数据绑定(jquery.tie)

阅读更多

如果开发过Java的RCP程序的同学就会知道数据绑定databinding这个功能。
由于之前JavaScript没有使用MVC框架,所以对于Web程序来说,也没有什么数据绑定之说,但是有了MVC框架之后,
Jquery也给出一个数组绑定插件Tie,这个插件可以实现数据绑定功能。

下面我们还是通过例子来讲解Tie是如何使用的,我们如何在Controller中使用Tie来达到视图绑定数据,当数据模型单个
字段值变化时,视图对应的值及时更新。

下面的代码是接着上一篇《JavaScriptMVC之数据绑定(jquery.tie)》的代码来讲的,不明白之处可以看一下这篇文章。

为了页面一下看清楚,我们把Fixture返回的数据修改为2条。

因为我们使用了Tie,所以我们在代码中要引入这个插件,其实很简单,在最终代码中我们会看到。

为了让大家很容易看懂,所以,这个例子只是简单讲解了name这个字段如何绑定到输入框中,而且当输入框的值变化时,表格中对应的值也更新。

修改视图代码1(message.ejs):

<h3>
<!--
	在这里我们需要修改这个地方,给名字值外层再加一个span,而且带一个对应属性名的class=name,
        这个是方便我们定位到应该更新表格那个元素
-->
<span class="name"><%= name %></span>
 <a href='javascript://' class='destroy'>X</a><a href='javascript://' class='update'>U</a></h3>
<p><%= description %></p>

修改Controller控制器代码2(list.js):

steal( 'jquery/controller',
	   'jquery/view/ejs',
	   'jquery/controller/view',
	   'cookbook/models',
	   'jquery/tie'//引入Tie插件
	   )
.then( './views/init.ejs', 
       './views/message.ejs', 
       function($){

/**
 * @class Cookbook.Message.List
 * @parent index
 * @inherits jQuery.Controller
 * Lists messages and lets you destroy them.
 */
$.Controller('Cookbook.Message.List',
/** @Static */
{
	defaults : {}
},
/** @Prototype */
{
	init : function(){
		this.element.html(this.view('init',Cookbook.Models.Message.findAll({
			group:["description"]
		})) )
	},
	'.destroy click': function( el ){
		if(confirm("Are you sure you want to destroy?")){
			el.closest('.message').model().destroy();
		}
	},
	//当点击U时,name字段会绑定到name的Input输入框上
	'.update click':function(el){
		//获取修改行的绑定到视图上的Model
		var model = el.closest(".message").model();
		//获取ID为name的Input输入框上是否已经绑定过Tie
		var tie = $("#name").controller("tie");
		//如果有,则把绑定删除
		if(tie){
			tie.destroy();
		}
		//给Model绑定一个name的事件监听,并且把处理函数定位到attrChanged函数,
		//这样当模型name变化时,会执行这个函数来处理视图
		model.bind("name",this.callback("attrChanged"));
		//把Model模型中name字段绑定到ID为name的Input输入框上
		$("#name").tie(model,"name");
	},
	/**
	*	模型中的Name字段值变化后,触发name事件,执行这个处理函数。
	*   这个处理函数是监听模型字段name值变化,而及时更新表格视图
	*
	*   @function attrChanged
	*	@param{event} ev 事件对象
	*   @param{string} val name修改后的值
	**/
	attrChanged:function(ev,val){
		//ev.target.elemnts()代表是事件对象目标元素,则是视图中对应那一行(h3)
		//ev.type的值是name,即是说修改name字段的值
		//find("."+ev.type)代表查找到表格中对应的html,然后把这个html(val)更新。
		//这样视图就是响应模型的单个字段的变化,当然这里是会变化的,
                //因为我们后续真正的项目中可以用到其它
		//的HTML标签,但是道理和写法都差不多的。
		ev.target.elements().find("."+ev.type).html(val);
	},
	"{Cookbook.Models.Message} destroyed" : function(Message, ev, message) {
		message.elements(this.element).remove();
	},
	"{Cookbook.Models.Message} created" : function(Message, ev, message){
		this.element.append(this.view('init', [message]))
	},
	"{Cookbook.Models.Message} updated" : function(Message, ev, message){
		message.elements(this.element)
		      .html(this.view('message', message) );
	}
});

});

 

至此,我们要讲解的数据绑定就结束了,当然还存在很多变化,这就是我们在实际项目中所需要改变的。这里,只是给一个进门的例子而已。

1
0
分享到:
评论

相关推荐

    谈谈JavaScriptMVC模式共3页.pdf.zip

    AngularJS使用双向数据绑定,使得Model和View的同步更为简单;Backbone.js强调轻量级和模块化,提供了一套基础的MVC结构;而Ember.js则提供了完整的解决方案,包括路由、模板和数据管理等。 在实际开发中,理解并...

    javascriptmvc-3.2.4.zip

    - **CanJS**:一个完整的MV*框架,包含了模型、视图和控制器功能,以及组件化、数据绑定和路由等特性。 - **jQuery.Controller**:实现了MVC模式中的控制器部分,处理DOM事件和应用逻辑。 - **jQuery.Model**:...

    javascriptmvc-3.3.zip

    4. **Model**: JavaScriptMVC的模型层负责数据的管理和状态控制。在这个版本中,模型可能增强了数据同步和验证功能,使得与服务器的数据交互更加安全和可靠。 5. **Controller**: 控制器处理用户输入并协调视图和...

    MVC框架 JavaScriptMVC.zip

    View在JavaScriptMVC中负责展示数据和响应用户交互。它通常是由模板语言编译生成的HTML,可以动态地绑定到Model的数据。当Model变化时,View会自动更新,反之亦然。此外,View还可以包含事件处理器,来处理用户与...

    javascriptmvc3.0.5

    上传了一半的javascriptmvc3.0.5,这个是【下】

    JavaScriptMVC框架Mithril.zip

    可将应用分成数据层、UI层和控制层。Mithril 压缩后只有 3kb 左右。API 提供一个模板引擎,带 DOM diff 实现,支持路由和组合。 示例代码: //namespace var app = {}; //model app.PageList = ...

    JavaScriptMVC之实战

    NULL 博文链接:https://lyndon-lin.iteye.com/blog/1556095

    javaScriptMVC 开源框架 第一部分

    7. **CanJS**: 是JavaScriptMVC中的核心库,提供了MVC结构的实现,包括数据绑定、依赖注入和事件处理等功能。 **应用场景** JavaScriptMVC适用于构建复杂、数据驱动的Web应用,如内容管理系统、电子商务平台等。...

    从JavaScriptMVC开始如何完成项目之创建应用程序

    7. **数据绑定(Data Binding)**:许多MVC框架提供双向数据绑定,使得模型和视图的变化可以自动反映到对方,减少了手动同步的工作。 8. **测试和调试**:编写单元测试和集成测试,确保各个部分功能正常。使用开发...

    javascriptmvc

    例如,AngularJS提供双向数据绑定,使得模型和视图自动同步;Backbone.js则强调轻量级和模块化,提供基本的MVC结构。 **压缩包子文件的文件名称列表详解:** - **js.bat**:可能是一个批处理文件,用于运行一些...

    JavascriptMVC代码

    这些框架提供了丰富的功能,如数据绑定、依赖注入、路由管理、模板引擎等,极大地提高了开发效率和代码可维护性。 1. **Model**:在JavaScript MVC中,Model层是应用程序的数据存储。它通常包含业务逻辑和数据验证...

    jQuery应用程序架构设计工具

    - **Backbone.js**:非常流行的MVC库之一,提供了一个强大的数据绑定系统以及丰富的视图管理机制。 - **Spine.js**:一个简单易用的MVC框架,特别适合小型项目。 - **Sammy.js**:专注于单页面应用的轻量级MVC框架,...

    JavaScriptMVC:JavaSriptMVC 高级编程课程

    JavaScriptMVC的模型层(`js.Model`)提供数据绑定、观察者模式和数据验证功能。你可以定义模型属性,当属性改变时,会自动更新关联的视图。 4. **Controller控制** 控制器(`js.Controller`)是用户交互的入口,...

    javaScriptMVC 开源框架 第二部分

    此外,该框架还可能包含其他工具和库,如Handlebars或Mustache用于模板引擎,提供数据绑定和动态视图更新;Backbone.js或AngularJS作为MVC架构的实现,提供模型、视图和路由器等核心组件。 Funcunit是这个压缩包中...

    javaScriptMVC 开源框架 第三部分(相关资料和例子)

    3. **框架的使用**:文档可能提供如何初始化框架、创建模型、定义视图和控制器的步骤,以及如何进行数据绑定和事件处理。 4. **最佳实践**:可能涵盖编写可维护的JavaScript MVC代码的技巧,如模块化、依赖注入、...

    从JavaScriptMVC开始如何完成项目之压缩文件和生成帮助文档

    在“从JavaScriptMVC开始如何完成项目之压缩文件和生成帮助文档”这个主题中,我们将探讨如何利用该框架进行项目开发,特别是涉及到的压缩文件处理和生成帮助文档这两个关键环节。 一、压缩文件 在项目开发中,压缩...

    浅谈JavaScript 库———jQuery, ExtJs 的对比研究

    ExtJs还内置了数据绑定、模型视图控制器(MVC)架构等现代前端开发模式,使得开发者可以构建高度可维护的应用程序。 ExtJs的体积相对较大,但这也意味着它包含了更多的功能和组件。对于需要构建大型、复杂Web应用的...

    javascriptmvc-3.0.5最新包

    javascriptmvc3.0.5,文件大于20MB,分成两个卷

    MVC的JavaScript Web富应用开发(完整版)

    介绍模板引擎和数据绑定 讲解远程数据加载、第二代Ajax以及跨域请求 利用WebSockets和Node构建实时应用 拖拽上传文件以及上传进度提示 讲解主流的库和框架,包括jQuery、JavaScriptMVC以及Backbone 编写测试...

Global site tag (gtag.js) - Google Analytics