- 浏览: 229120 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
annyliyear:
找到的ExtJS实现多选下拉框3个代码 -
yinboxian:
源码太乱了
JXTA中使用JxtaServerPipe和JxtaBiDiPipe实现双向可靠的通信 -
yinboxian:
我的peers第一次执行时可以得到正确的结果,以后就不行了。不 ...
JXTA中基于管道监听方式通信 -
cuizhenfu#gmail.com:
http://www.cnblogs.com/cuizhf
JXTA中使用JxtaServerPipe和JxtaBiDiPipe实现双向可靠的通信 -
luxing44530:
请问, jsp页面如果在 META-INF 中, 改怎么访问? ...
Servlet3.0 新特性之模块化实践
控制器安装和卸载事件句柄非常容易。卸载事件句柄对于防止内存泄漏非常重要。
自动绑定
当一个新的控制器创建后,控制器原型方法那些是事件句柄。它会把使用控制器的事件委托功能把这些函数绑定控制器上。 当这个控制器销毁(或者对应的元素从页面上删除),控制器将自动卸载它的事件句柄。 例如:以下控制器的每个函数将自动绑定:
$.Controller("Crazy",{ // listens to all clicks on this element "click" : function(el, ev){}, // listens to all mouseovers on // li elements withing this controller "li mouseover" : function(el, ev){} // listens to the window being resized "{window} resize" : function(window, ev){} })
控制器通过函数名加空间,标准的DOM事件名,Jquery专用事件名(请查看$.event.special)。
一般而言,除了没有选择器和事件不在Jquery专用事件内,控制器都会知道自动绑定事件句柄。
如果遇到上面的情况,你就需要添加这个函数名到控制器的静态listensTo属性里。 例如:
$.Controller("MyShow",{ listensTo: ["show"] },{ show: function( el, ev ) { el.show(); } }) $('.show').my_show().trigger("show");
回调函数的传递参数
事件句柄绑定是控制器在元素上回调且把事件当成参数传递过来。this引用指的是控制器实例。例如:
$.Controller("Tabs",{ // li - the list element that was clicked // ev - the click event "li click" : function(li, ev){ this.tab(li).hide() }, tab : function(li){ return $(li.find("a").attr("href")) } })
模板匹配事件绑定
模板匹配事件句柄是控制器一个非常强大的特性。你可以把事件名,选择器,或者事件的根元素参数化。 模板匹配事件名称和选择器 常常,你想要创建一个配件行为配置。一个通俗的例子是菜单显示子菜单事件(例如:点击或者鼠标进入)。 以下控制器让你配置当一个菜单想显示子菜单时的事件。 以下创建2个按钮。
$.Controller("Menu",{ "li {showEvent}" : function(el){ el.children('ul').show() } }) $("#clickMe").menu({showEvent : "click"}); $("#touchMe").menu({showEvent : "mouseenter"});
$.Controller使用双括号来替换控制器中的options对应的值。这就意味着我们可以很容易实现一个默认的showEvent值来代替上面的作法, 而且创建菜单时,不需要再提供一个值了。例如:
$.Controller("Menu", { defaults : { showEvent : "click" } }, { "li {showEvent}" : function(el){ el.children('ul').show() } }); $("#clickMe").menu(); //defaults to using click
有时,我们可能想去配置我们的配件去使用不同的元素。下面是把菜单子菜单显示事件绑定到按钮上。
$.Controller("Menu",{ "{button} {showEvent}" : function(el){ el.children('ul').show() } }) $('#buttonMenu').menu({button: "button"});
模板匹配根元素
最后,控制器的事件句柄绑定到控制器元素外的对象上。 以下是监听窗口的点击事件:
$.Controller("HideOnClick",{ "{window} click" : function(){ this.element.hide() } })
如下是监听Todos的创建事件:
$.Controller("NewTodos",{ "{App.Models.Todo} created" : function(Todo, ev, newTodo){ this.element.append("newTodos.ejs", newTodo) } });
但是上面代码只能监听Todo Model的新建Todos的动作。我们也可以把它修改为可配置的:
$.Controller("Newbie",{ "{model} created" : function(Model, ev, newItem){ this.element.append(this.options.view, newItem) } }); $('#newItems').newbie({ model: App.Models.Todo, view: "newTodos.ejs" })
那么模板匹配到底是如何实现的呢?
当查找一个值去替换双括号,控制器首先想找在options中的项,如果没有查找到,再去Window对象中查找。这里不是使用eval去查找对象。 代替它的是使用了jQuery.String.getObject,详细请看语言助手(Language helpers)下的$.String.getObject,在这里不详细介绍。
预订OpenAjax信息和自定义绑定
使用jquery/controller/subscribe插件允许控制器监听OpenAjax.hub信息。 其实这个功能很像我们Java中的订阅模式,我们只需要预订对应事件,当事件发生时,会通知所有的订阅者。 例如:
steal('jquery/controller/subscribe').then(function(){ //这个控制器既是订阅者,又是发布者 $.Controller('subscribeTest',{ onDocument: false }, { "#subscribe1 click": function(el, ev){ ev.stopPropagation(); //点击按钮,向所有订阅者发布 this.publish("oaSubscribe1", {"params":"Hola Mundo"}); }, //订阅者收到发布的处理函数 "oaSubscribe1 subscribe": function(called, data){ alert("subscribeTest " + data.params + " : " + this.Class.shortName); } }); //这个控制器只是订阅者 $.Controller('subscribeTest1',{ onDocument: false }, { //订阅者2收到发布的处理函数 "oaSubscribe1 subscribe": function(called, data){ alert("subscribeTest1 " + data.params + " : " + this.Class.shortName); } }); var subscribeController = new subscribeTest($("#testSubscribe")[0]); var subscribeController1 = new subscribeTest1($("#subscribe2")); $("#off").bind("click",function(){ subscribeController.destroy(); subscribeController1.destroy(); }) });
手动绑定事件
控制器的原型bind和delegate方法都让监听其它元素的事件。这些事件句柄将在控制器实例销毁后去绑定。
发表评论
-
test
2012-11-21 19:31 0关于请假: 1、做好工作安排,回复华为正式邮件! 2、回去 ... -
JavaScriptMVC之实战
2012-06-09 15:05 1907JavaScriptMVC之实战 下面我们通过一个真实的项目 ... -
JavaScriptMVC之快速开发
2012-04-28 21:53 4369有些同学反映说,需要看太多的篇章才能明白如何使用JavaScr ... -
JavaScriptMVC之语言助手
2012-04-26 21:00 1399在这篇文章,我只挑 ... -
JavaScriptMVC之专用事件
2012-04-26 20:32 1529JavaScriptMVC提供了一串很 ... -
JavaScriptMVC之Model
2012-04-25 22:52 1984Model顶层负责程序的数据层,使用它可以很容易做以下操作: ... -
JavaScriptMVC之View
2012-04-24 20:35 2170视图提供在JQuery中使用模板的一致接口。 当模板 ... -
JavaScriptMVC之Controller
2012-04-24 20:08 1712Controller帮助创建合理的,可释放内存,快速执行jQu ... -
JavaScriptMVC之Class
2012-04-23 20:50 1271Class提供相当继承的功能。使用Class就可以让我们结合面 ... -
JavaScriptMVC之Fixture续
2012-04-22 00:54 1196其实下面我写的主要并 ... -
JavaScriptMVC之数据处理
2012-04-21 23:42 1211常常,项目中创建,修 ... -
JavaScriptMVC之数据绑定(jquery.tie)
2012-04-20 23:14 1685如果开发过Java的RCP程序的同学就会知道数据绑定datab ... -
JavaScriptMVC之Fixture
2012-04-20 22:19 1384注:阅读这篇同学必须 ... -
从JavaScriptMVC开始如何完成项目之压缩文件和生成帮助文档
2012-04-13 23:45 14831、压缩文件 在厨师手 ... -
从JavaScriptMVC开始如何完成项目之创建测试程序
2012-04-13 21:56 1021JavaScriptMVC放一个极大强调的重点在测试方面。Ja ... -
从JavaScriptMVC开始如何完成项目之创建应用程序
2012-04-12 23:56 1181如何使用JavaScriptMVC开发项目第一步,就是创建应用 ... -
JavascriptMVC 之 route 的 history功能的使用
2012-04-08 11:10 1652JavascriptMVC 之 route 的 his ... -
wijmo+javascriptmvc开发注意事项
2012-04-07 09:31 1313下面是在使用wijmo+javasc ... -
javascriptmvc之funcunit
2012-03-30 00:19 990javascriptmvc之funcunit funcu ... -
学习jquery mvc第一天,hello
2012-03-29 23:09 2206学习jquery mvc第一天,hello 做为程序员,对于 ...
相关推荐
JavascriptMVC代码
NULL 博文链接:https://lyndon-lin.iteye.com/blog/1556095
上传了一半的javascriptmvc3.0.5,这个是【下】
javascriptmvc-3.2.4.zip
javascriptmvc-3.3.zip
javascript的mvc框架。类似于java的mvc框架
MVC框架 JavaScriptMVC ,JavaScriptMVC 是一个 JavaScript 的 MVC 框架,通过它可以简化项目的开发...
javascriptmvc3.0.5,文件大于20MB,分成两个卷
谈谈JavaScriptMVC模式共3页.pdf.zip
javaScriptMVC开源框架,是一个不错的前端界面MVC框架,是在jquery等开源项目的基础上建立的
javaScriptMVC开源框架,是一个不错的前端界面MVC框架,是在jquery等开源项目的基础上建立的 说明:此文件解压后和第一部分文件夹必须放到一起才能正确使用
NULL 博文链接:https://lyndon-lin.iteye.com/blog/1484876
可将应用分成数据层、UI层和控制层。Mithril 压缩后只有 3kb 左右。API 提供一个模板引擎,带 DOM diff 实现,支持路由和组合。 示例代码: //namespace var app = {}; //model app.PageList = ...
NULL 博文链接:https://lyndon-lin.iteye.com/blog/1485743
内容索引:脚本资源,Ajax/JavaScript,JavaScriptMVC JavaScriptMVC 是一个功能强大的 JavaScript framework....JavaScriptMVC应用了模型-视图-控制器架构模式,把业务逻辑和表示分离,使得代码更加模块化。
JavaScriptMVC JavaSriptMVC 高级编程课程
:选择JavaScriptMVC框架很难。一方面要考虑的因素非常多,另一方面这种框架也非常多,而要从中选择一个合适的,还真得费一番心思。本文对JavaScriptMVC框架Angular、Backbone、CanJS和Ember作了比较,供大家参考。...
这些框架实现了MVC,使得在一个单页面中实现根据需要变化视图时更加轻松,而模型-视图-控制器(mvc)的核心概念就是:处理传入请求的控制器、显示信息的视图、表示业务规则和数据访问的模型。因此,当需要创建这样一...