如果开发过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) );
}
});
});
至此,我们要讲解的数据绑定就结束了,当然还存在很多变化,这就是我们在实际项目中所需要改变的。这里,只是给一个进门的例子而已。
分享到:
相关推荐
AngularJS使用双向数据绑定,使得Model和View的同步更为简单;Backbone.js强调轻量级和模块化,提供了一套基础的MVC结构;而Ember.js则提供了完整的解决方案,包括路由、模板和数据管理等。 在实际开发中,理解并...
- **CanJS**:一个完整的MV*框架,包含了模型、视图和控制器功能,以及组件化、数据绑定和路由等特性。 - **jQuery.Controller**:实现了MVC模式中的控制器部分,处理DOM事件和应用逻辑。 - **jQuery.Model**:...
4. **Model**: JavaScriptMVC的模型层负责数据的管理和状态控制。在这个版本中,模型可能增强了数据同步和验证功能,使得与服务器的数据交互更加安全和可靠。 5. **Controller**: 控制器处理用户输入并协调视图和...
View在JavaScriptMVC中负责展示数据和响应用户交互。它通常是由模板语言编译生成的HTML,可以动态地绑定到Model的数据。当Model变化时,View会自动更新,反之亦然。此外,View还可以包含事件处理器,来处理用户与...
上传了一半的javascriptmvc3.0.5,这个是【下】
可将应用分成数据层、UI层和控制层。Mithril 压缩后只有 3kb 左右。API 提供一个模板引擎,带 DOM diff 实现,支持路由和组合。 示例代码: //namespace var app = {}; //model app.PageList = ...
NULL 博文链接:https://lyndon-lin.iteye.com/blog/1556095
7. **CanJS**: 是JavaScriptMVC中的核心库,提供了MVC结构的实现,包括数据绑定、依赖注入和事件处理等功能。 **应用场景** JavaScriptMVC适用于构建复杂、数据驱动的Web应用,如内容管理系统、电子商务平台等。...
7. **数据绑定(Data Binding)**:许多MVC框架提供双向数据绑定,使得模型和视图的变化可以自动反映到对方,减少了手动同步的工作。 8. **测试和调试**:编写单元测试和集成测试,确保各个部分功能正常。使用开发...
例如,AngularJS提供双向数据绑定,使得模型和视图自动同步;Backbone.js则强调轻量级和模块化,提供基本的MVC结构。 **压缩包子文件的文件名称列表详解:** - **js.bat**:可能是一个批处理文件,用于运行一些...
这些框架提供了丰富的功能,如数据绑定、依赖注入、路由管理、模板引擎等,极大地提高了开发效率和代码可维护性。 1. **Model**:在JavaScript MVC中,Model层是应用程序的数据存储。它通常包含业务逻辑和数据验证...
- **Backbone.js**:非常流行的MVC库之一,提供了一个强大的数据绑定系统以及丰富的视图管理机制。 - **Spine.js**:一个简单易用的MVC框架,特别适合小型项目。 - **Sammy.js**:专注于单页面应用的轻量级MVC框架,...
JavaScriptMVC的模型层(`js.Model`)提供数据绑定、观察者模式和数据验证功能。你可以定义模型属性,当属性改变时,会自动更新关联的视图。 4. **Controller控制** 控制器(`js.Controller`)是用户交互的入口,...
此外,该框架还可能包含其他工具和库,如Handlebars或Mustache用于模板引擎,提供数据绑定和动态视图更新;Backbone.js或AngularJS作为MVC架构的实现,提供模型、视图和路由器等核心组件。 Funcunit是这个压缩包中...
3. **框架的使用**:文档可能提供如何初始化框架、创建模型、定义视图和控制器的步骤,以及如何进行数据绑定和事件处理。 4. **最佳实践**:可能涵盖编写可维护的JavaScript MVC代码的技巧,如模块化、依赖注入、...
在“从JavaScriptMVC开始如何完成项目之压缩文件和生成帮助文档”这个主题中,我们将探讨如何利用该框架进行项目开发,特别是涉及到的压缩文件处理和生成帮助文档这两个关键环节。 一、压缩文件 在项目开发中,压缩...
ExtJs还内置了数据绑定、模型视图控制器(MVC)架构等现代前端开发模式,使得开发者可以构建高度可维护的应用程序。 ExtJs的体积相对较大,但这也意味着它包含了更多的功能和组件。对于需要构建大型、复杂Web应用的...
javascriptmvc3.0.5,文件大于20MB,分成两个卷
介绍模板引擎和数据绑定 讲解远程数据加载、第二代Ajax以及跨域请求 利用WebSockets和Node构建实时应用 拖拽上传文件以及上传进度提示 讲解主流的库和框架,包括jQuery、JavaScriptMVC以及Backbone 编写测试...