当我用Java进行大多数编程时,我发现在Node.js模块而不是对象实例中导出类非常引人注目,例如:
class Connection {
constructor(db) {
this.db = db;
}
connect(connectionString) {
this.db.connect(connectionString);
}
}
exports.Connection = Connection;
Run Code Online (Sandbox Code Playgroud)
由于这样做需要跨相关模块多次实例化该类,因此我仍然需要导出一个已经存在的实例,以供其余生产代码使用。我在同一模块中执行此操作:
exports.connection = new Connection(require("mongoose"));
Run Code Online (Sandbox Code Playgroud)
这允许一些可测试性,因为可以在测试中交换真正的依赖项:
const Connection = require("./connection").Connection;
describe("Connection", () => {
it("connects to a db", () => {
const connection = new Connection({connect: () => {}});
// ...
});
});
Run Code Online (Sandbox Code Playgroud)
这种方法有效,但是当我在这里混合两种模式时却感觉很奇怪:导出原型(用于单元测试)和实例(用于生产代码)。这可以接受吗?我应该继续执行此操作还是更改为其他内容?如果是这样,首选模式是什么?
javascript dependency-injection testability node.js node-modules
我会切入正确的观点.这是输出:

(现在是一些可选代码 - 只有在您真正想要时才读取;))
这是标记:
<a href="/" id="logo_wrapper">
<span class="logo logo_normal"></span>
<span class="logo logo_hover"></span>
</a>
Run Code Online (Sandbox Code Playgroud)
这是CSS(仅限于相关内容,为了您的阅读乐趣):
#logo_wrapper {
position:relative;
}
#logo_wrapper .logo {
display:block;
width:260px;
height:80px;
background-image:url(logo.png);
position:absolute;
}
#logo_wrapper .logo_normal {
background-position:0 0;
}
#logo_wrapper .logo_normal:hover {
opacity:0;
filter:alpha(opacity=0);
}
#logo_wrapper .logo_hover {
background-position:0 -80px;
opacity:0;
filter:alpha(opacity=0);
}
#logo_wrapper .logo_hover:hover {
opacity:1;
filter:alpha(opacity=100); /* THIS IS THE OFFENDER! */
}
Run Code Online (Sandbox Code Playgroud)
只是为了澄清:我知道我可以单独使用span,只是background-position在悬停时切换徽标,但完整的CSS为真正的浏览器提供了可爱的CSS3过渡,不应该上下滚动徽标.
好的,所以,它是一个32位颜色深度的PNG,当然还有透明度.当我完全不使用alpha过滤器时,IE8中的一切都很好filter:alpha(opacity=0).但是,如果将不透明度设置为100,仅仅使用滤镜会导致IE8变得疯狂并使所有不完全透明的像素100%不透明.并不是说这个特殊的图像在这种效果下看起来很糟糕,但它仍然很烦人:D.
现在,我很清楚IE8因透明的PNG问题而臭名昭着,其中的问题可追溯到IE6及其透明区域的可怕的纯青色填充.可以通过一些IE行为修复黑魔法.
关于IE8可以做些什么?
我很难让PHP APC工作.这是我的测试代码:
<form>
<input type="text" name="apc">
<input type="submit">
</form>
<?php
apc_store('foo','FOO');
if (isset($_GET['apc'])) {
apc_store($_GET['apc'],$_GET['apc']);
}
?>
<pre>CACHE INFO (USER): <?php print_r(apc_cache_info("user",false)); ?></pre>
<pre>CACHE INFO: <?php print_r(apc_cache_info()); ?></pre>
<pre>FOO: <?php print_r(apc_fetch("foo")); ?></pre>
<pre>BAR: <?php print_r(apc_fetch("bar")); ?></pre>
<pre><?php if (apc_exists("bar")) { ?>bar exists!<?php } else { ?>bar does not exist!<?php } ?></pre>
<?php apc_clear_cache(); ?>
Run Code Online (Sandbox Code Playgroud)
简而言之:填写表单并将插入的值存储在APC中.始终存储键"foo".您可以尝试存储"bar"以查看apc_fetch()使用新添加的密钥.
什么工作正常:
apc_store()apc_fetch()什么不:
apc_cache_info()(无论我传递给函数的参数是什么)总是打印一个空数组,尽管apc_fetch()成功检索数据apc_clear_cache()永远不会清除缓存(输入后"bar"始终显示).如果我提供"user"参数或保留没有参数的函数,则都是如此.apc_exists()产生致命错误:调用未定义的函数apc_exists()万一它有用:我运行Zend Server CE 5.6.0(全新安装,半小时前完成),PHP 5.3.9.昨天更加古老的Zend Server CE版本(运行PHP 5.3.5)也是如此.我不知道哪个版本的APC附带Zend …
在对SO的相关问题进行快速扫描之后,我推断出没有能够检查malloc已分配给指针的内存量的函数.我正在尝试使用C中的简单char*复制一些std :: string基本功能(主要是动态大小),并且不想一直调用realloc.我想我需要跟踪已经分配了多少内存.为了做到这一点,我正在考虑创建一个typedef,它将包含字符串本身和一个当前分配的内存量的整数,如下所示:
typedef struct {
char * str;
int mem;
} my_string_t;
Run Code Online (Sandbox Code Playgroud)
这是一个最佳解决方案,或者您可以建议一些能够带来更好结果的方案吗?在此先感谢您的帮助.
我正试图在C中实现George Marsaglia的Complementary Multiply-With-Carry算法.它似乎在Win7 64位和Linux 32位下运行良好,但似乎在Win 7 32位下表现得很奇怪.它返回的随机数是32位,但是内部使用的临时值应该是64位,并且它被声明:
unsigned long long t;
Run Code Online (Sandbox Code Playgroud)
我怀疑这可能是造成不良行为的原因,所以我的问题是:
类型是"长长"64位吗?是否支持32位Windows?
所有浏览器,除了Internet Explorer(显然甚至是IE9测试版)都支持text-shadow,此外,webkit浏览器似乎也能理解-webkit-text-stroke.但是如何在Internet Explorer中模拟文本笔划?我已经看过可用的滤镜了,在我看来,没有一个可以用来模拟这个,除了可能来自Glow,但它会产生模糊的光晕,而不是一个坚实的轮廓.
有没有办法使用CSS和/或Microsoft过滤器/行为和/或JavaScript来实现这一目标?
我不需要解决方案在IE的古老版本中工作,我的布局不会针对IE7或更早版本进行优化.
我在我的应用程序中有一个模型,负责创建初始数据库结构(一种安装程序).我最近添加了可翻译内容(使用gettext).我想使初始内容语言依赖.
在模型中使用可翻译内容的最佳方法是什么?有没有办法view->translate()在模型中使用函数或者我是否需要从外部传递已经翻译的字符串,例如作为参数?
model-view-controller zend-framework model internationalization
如果 console.log 只是 process.stdout.write ,末尾有一个换行符,那么为什么当我使用 process.stdout.write 时我没有打印任何内容,但我在 console.log() 中得到以下代码的答案。
var waittime = 3000;
var currenttime = 0;
var waitint = 10;
function percentage(p) {
process.stdout.clearLine();
process.stdout.cursorTo(0);
process.stdout.write(`waiting ... ${p}%`);
}
var interval = setInterval(function() {
currenttime += waitint;
percent = Math.floor((currenttime / waittime) * 100);
percentage(percent);
}, waitint);
setTimeout(function() {
clearInterval(interval);
percentage(100);
process.stdout.write("\nGowtham");
}, waittime);
process.stdout.write("\nIt's not getting displayed");
//console.log("It's getting displayed here!");
Run Code Online (Sandbox Code Playgroud)
怎么了?我想是有区别的。如我错了请纠正我。
我有一个可排序和可放置的列表,还有一组单独的可拖动:
ul.sortable
li.droppable
li.droppable
li.droppable
/ul
ul
li.draggable
li.draggable
li.draggable
/ul
Run Code Online (Sandbox Code Playgroud)
我在droppables上应用了悬停类:
$(".droppable").droppable({ hoverClass: "hover" });
Run Code Online (Sandbox Code Playgroud)
悬停应该是用户的视觉提示,告诉他可以将拖动拖放到可放置的拖放上.
问题是当一个droppable也被一个可排序的元素悬停时,也会应用悬停类.在这种情况下,视觉提示是完全错误的.
这是一个说明问题的小提琴(拖动可拖动的可拖动的,重新排序可排序的):http://jsfiddle.net/TWXeH/
如何使悬停类只在可拖放的可拖动时才能工作,而不是在可排序的情况下?
我想从文本或字符串中提取href链接.我写了一个小函数来做到这一点但是当变换的字符串很大时这很慢.我的代码是
function spy_linkIntoString_Format($text) {
global $inc_lang; $lang = $inc_lang['tlang_media'];
$it = explode(' ' ,$text);
$result = '';
foreach($it as $jt) {
$a = trim($jt);
if(preg_match('/((?:[\w\d]+\:\/\/)?(?:[\w\-\d]+\.)+[\w\-\d]+(?:\/[\w\-\d]+)*(?:\/|\.[\w\-\d]+)?(?:\?[\w\-\d]+\=[\w\-\d]+\&?)?(?:\#[\w\-\d]*)?)/', $jt)) {
$pros_lis = str_replace('www.','',$jt);
$pros_lis = (strpos($pros_lis, 'http://') === false ? 'http://'. $pros_lis : $pros_lis);
$urlregx = parse_url($pros_lis);
$host_name = (!empty($urlregx['host']) ? $urlregx['host'] : '.com');
if($host_name == 'youtube.com') {
$string_v = $urlregx['query']; parse_str($string_v, $outs); $stID = $outs['v'];
$result .= '<a title="Youtube video" coplay="'.$stID.'" cotype="1" class="media_spy_vr5" href="#"><span class="link_media"></span>'.$lang['vtype_youtube'].'</a> ';
} elseif($host_name == 'vimeo.com') {
$path_s …Run Code Online (Sandbox Code Playgroud)