首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

关于seajs模块间相互依赖调用的解耦有关问题

2012-09-07 
关于seajs模块间相互依赖调用的解耦问题前端密集型项目中如果数据同步的量很大,往往需要对于多个组件进行

关于seajs模块间相互依赖调用的解耦问题

前端密集型项目中如果数据同步的量很大,往往需要对于多个组件进行数据同步,其中必会导致几个组件之间的互相依赖调用,在seajs中递归嵌套的调用组件会引起循环引用导致内存泄露。

?

比如有这样两个模块组件:

?

//@file : module/buddy/friend-in-group/friend-in-group.jsdefine(function(require, exports, module){var $ = require('lib/jquery.js'),_ = require('lib/underscore.js'),fmw = require('module/buddy/friend-in-group/friend-middleware'),friend = require('module/buddy/add-friend/add-friend');var _addFriend = function(){// Some logic here};var _removeFriend = function(uid){// Some logic here};var subscribeEvent = function(){fmw.subscribe('add',function(data,arg){// Some logic here_addFriend(uid,false);},[currentGroupId]);fmw.subscribe('remove',function(data,arg){// Some logic here_removeFriend(uid);},[currentGroupId]);}exports.init = function(){subscribeEvent();friend.add();}});
?

?

如上面的代码便可以进行方法的注入与方法的触发,在friend-in-group中注册add和remove的方法事件,在add-friend中进行方法事件的触发。在subscribeEvent方法中将匿名方法传递到了中间件模块中,这个匿名函数在arg中保存了注册组件方的传入数据,而参数data

则是触发模块方的传入参数,在注册模块方引用该模块的私有函数,相当于将这个匿名函数的闭包作用范围扩展到了注册模块内部。这样在触发事件时便可保留触发时注册模块的一切被外引用状态。起到了解耦的效果。

?

1 楼 lifesinger 2012-07-11   升级到 seajs 1.2.0 可以有效解决这个问题。

热点排行