Amn*_*non 8 javascript jsf client-side javascript-events
我正在将JSF重型Web应用程序移动到REST并主要是JS模块应用程序.
我已经看过Nicholas Zakas在YUI影院播放的"可扩展的javascript应用程序架构"(精彩视频),我实施了大部分演讲并取得了很大的成功,但我有一些问题:
我发现这个讲座在模块和沙箱之间的关系方面有点混乱,一方面,根据我的理解,模块不应该受到沙盒之外发生的事情的影响,这就是他们通过沙箱发布事件的原因(而不是通过核心,因为核心是用于隐藏基础库)但应用程序中的每个模块都有一个新的沙箱?沙盒是否应该将事件限制为使用它的modoules,还是应该跨页面发布事件?例如:如果我有两个可编辑的表,但我想在不同的沙箱中包含每个表,并且它的事件只影响该沙箱中的模块,比如每个表的消息框,这是一个不同的模块/小部件,我该怎么做呢每个模块的沙箱,
虽然我可以隐藏基本库的小东西,如id选择器等.我仍然希望使用基础库的模块依赖和资源加载,并使用像YUI加载器或dojo.require之类的东西,所以实际上我隐藏了基础库但模块本身是由基础库定义和加载的......对我来说似乎有点奇怪.
库不会返回简单的js对象,但通常会将它们包装起来:例如:你可以做一些类似于$$('.classname')的东西.每个(...清理代码很多,包装底部然后在该模块通过执行.each为基础库创建依赖关系,但不使用这些功能会导致编写大量代码,而这些代码可能会被遗漏......并且实现该功能非常容易出错.
有没有人有建立这个订单的正面堆栈的经验?使用yui数据表但使用dojo进行表单验证更改基础库和/或从不同库中获取模块有多容易?
如果你选择像我说的那样做,并且通过YUI加载器加载dojo表单验证小部件,那么2 + 4的某种组合可能意味着dojocore是一个模块而表单模块依赖于它?
谢谢.
我们在应用程序中大量使用这种模式。查看Stoyan Stefanov 所著的《JavaScript Patterns》一书,详细了解如何实现沙盒模式。基本上它看起来像这样:
(function (global) {
var Sandbox = function fn (modules, callback) {
var installedModules = Sandbox.modules,
i = 0,
len = modules.length;
if (!(this instanceof fn)) {
return new fn(modules, callback);
}
// modules is an array in this instance:
for (; i < len; i++) {
installedModules[modules[i]](this);
}
callback(this);
};
Sandbox.modules = {};
global.Sandbox = Sandbox;
})(this);
// Example module:
// You extend the current sandbox instance with new functions
Sandbox.modules.ajax = function(sandbox) {
sandbox.ajax = $.ajax;
sandbox.json = $.getJSON;
};
// Example of running your code in the sandbox on some page:
Sandbox(['ajax'], function(sandbox) {
sandbox.ajax({
type: 'post',
url: '/Sample/Url',
success: function(response) {
// success code here. remember this ajax maps back to $.ajax
}
});
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1112 次 |
最近记录: |