我正在将 JSF 繁重的 Web 应用程序迁移到 REST 且主要是 JS 模块应用程序。
我在 YUI theater 上看过 Nicholas Zakas 的“可扩展的 javascript 应用程序架构”(非常棒的视频),我成功地实现了大部分演讲,但我有一些问题:
关于模块和沙箱之间的关系,我发现讲座有点困惑,一方面,根据我的理解,模块不应该受到沙箱之外发生的事情的影响,这就是它们发布事件的原因通过沙箱(而不是通过核心,因为核心用于隐藏基础库)但是应用程序中的每个模块都有一个新的沙箱?沙箱不应该将事件限制到使用它的模块,还是应该跨页面发布事件?例如:如果我有两个可编辑的表,但我想将每个表包含在不同的沙箱中,并且它的事件仅影响该沙箱内的模块,比如每个表的消息框是一个不同的模块/小部件,我如何使用沙箱来做到这一点每个模块,当然我可以用 moduleid 作为事件的前缀,但这会产生我想避免的耦合......而且我不想将模块打包为每个组合的一个模块,因为我已经有 6-7 个模块。
虽然我可以为 id 选择器等小东西隐藏基础库。我仍然想使用基础库来进行模块依赖和资源加载,并使用 YUI 加载器或 dojo.require 之类的东西 所以实际上我隐藏了基础库,但是模块本身是由基础库定义和加载的……我觉得有点奇怪。
库不返回简单的 js 对象,但通常将它们包装起来,例如:你可以做一些像 $$('.classname').each(.. 这样的事情来清理代码,包装基础然后在模块中创建依赖项是没有意义的通过执行 .each 但不使用这些功能的基础库会编写大量代码,这些代码可以省略......并且实现该功能非常容易出错。
有没有人有构建此订单的前端堆栈的经验?使用 yui 数据表但使用 dojo 进行表单验证,更改基础库和/或拥有来自不同库的模块有多容易...?
有点像 2+4 的组合,如果你选择像我说的那样做,并通过 YUI 加载器为输入加载 dojo 表单验证小部件,这是否意味着 dojocore 是一个模块,而表单模块依赖于它?
最佳答案
我们在我们的应用程序中大量使用这种模式。查看 Stoyan Stefanov 的JavaScript 模式 一书,详细了解如何实现沙盒模式。基本上它看起来像这样:
(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
}
});
});
关于Javascript 自包含沙箱事件和客户端堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3628649/
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案
是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s
我正在尝试将以下SQL查询转换为ActiveRecord,它正在融化我的大脑。deletefromtablewhereid有什么想法吗?我想做的是限制表中的行数。所以,我想删除少于最近10个条目的所有内容。编辑:通过结合以下几个答案找到了解决方案。Temperature.where('id这给我留下了最新的10个条目。 最佳答案 从您的SQL来看,您似乎想要从表中删除前10条记录。我相信到目前为止的大多数答案都会如此。这里有两个额外的选择:基于MurifoX的版本:Table.where(:id=>Table.order(:id).
我的Gallery模型中有以下查询:media_items.includes(:photo,:video).rank(:position_in_gallery)我的图库模型有_许多媒体项,每个都有一个照片或视频关联。到目前为止,一切正常。它返回所有media_items包括它们的photo或video关联,由media_item的position_in_gallery属性排序。但是我现在需要将此查询返回的照片限制为仅具有is_processing属性的照片,即nil。是否可以进行相同的查询,但条件是返回的照片等同于:.where(photo:'photo.is_processingIS
-if!request.path_info.include?'A'%{:id=>'A'}"Text"-else"Text"“文本”写了两次。我怎样才能只写一次并同时检查path_info是否包含“A”? 最佳答案 有两种方法可以做到这一点。使用部分,或使用content_forblock:如果“文本”较长,或者是一个重要的子树,您可以将其提取到一个部分。这会使您的代码变干一点。在给出的示例中,这似乎有点矫枉过正。在这种情况下更好的方法是使用content_forblock,如下所示:-if!request.path_info.inc
Ocra无法处理需要“tk”的应用程序require'tk'puts'nope'用奥克拉http://github.com/larsch/ocra不起作用(如链接中的一个问题所述)问题:https://github.com/larsch/ocra/issues/29(Ocra是1.9的"new"rubyscript2exe,本质上它用于将rb脚本部署为可执行文件)唯一的问题似乎是缺少tcl的DLL文件我不认为这是一个问题据我所知,问题是缺少tk的DLL文件如果它们是已知的,则可以在执行ocra时将它们包括在内有没有办法知道tk工作所需的DLL依赖项? 最佳答
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
这是我在ActiveAdmin中的自定义页面ActiveAdmin.register_page"Settings"doaction_itemdolink_to('Importprojects','settings/importprojects')endcontentdopara"Text"endcontrollerdodefimportprojectssystem"rakedataspider:import_projects_ninja"para"OK"endendend我想做的是,当我单击“导入项目”按钮时,我想在Controller中执行rake任务。但是我无法访问该方法。可能是什
我正在使用DMOZ的listofurltopics,其中包含一些具有包含下划线的主机名的url。例如:608609TheOuterHeaven610InformationandimagegalleryofMcFarlane'sactionfiguresforTrigun,Akira,TenchiMuyoandotherJapaneseSci-Fianimations.611Top/Arts/Animation/Anime/Collectibles/Models_and_Figures/Action_Figures612虽然此url可以在网络浏览器中使用(或者至少在我的浏览器中可以使用: