我正在骨干视图中使用D3进行图形视觉化.我允许用户捏缩放图形,使用webkit转换平滑过渡,并在发布时重新绘制.为了保持代码简单,我只是以新的比例重新绘制图形,而不是重新计算元素的新位置和大小(这是我原来的方法,但我的团队请求重绘路径).
[我通过推特与博斯托克交谈过.这实际上不是首选的做事方式]
我注意到的是,对于每次重绘,我都会倾倒大量未清理的dom节点.
这与事件处理程序/闭包中的循环引用无关,因为我已禁用除标签之外的所有标签(这些标签没有附加处理程序),并且会发生相同的行为.
我已经尝试从图中积极地删除元素,但dom节点似乎仍然泄漏.
这是一些相关的代码.为一组新标签调用'render'.完成缩放后,在旧图上调用"close",并使用另一个视图实例创建一个新的并调用"render":
render: function() {
// create the svg offscreen/off dom
//document.createElementNS(d3.ns.prefix.svg, "svg")
var svg = this.svg = d3.select(this.el)
.append("svg:svg")
.attr('width', this.VIEW_WIDTH)
.attr('height', this.VIEW_HEIGHT)
this._drawTimeTicks.call(this, true);
return this;
},
_drawTimeTicks: function(includeLabels) {
var bounds = this.getDayBounds();
var min = bounds.start;
var date = new Date(min);
var hour = 1000 * 60 * 60;
var hourDiff = 60 * this.SCALE;
var graphX = (date.getTime() - min) / 1000 / 60;
var textMargin = 7;
var textVert = …Run Code Online (Sandbox Code Playgroud) 我有一个使用数组键值设置的couchdb视图,格式如下:
[articleId, -timestamp]
Run Code Online (Sandbox Code Playgroud)
我想查询具有相同文章ID的所有条目.所有时间戳都可以接受.
现在我正在使用这样的查询:
?startkey=["A697CA3027682D5JSSC",-9999999999999]&endkey=["A697CA3027682D5JSSC",0]
Run Code Online (Sandbox Code Playgroud)
但我想要一些更简单的东西.
是否有一种简单的方法来完全通配第二个关键元素?这个最简单的语法是什么?
我正在努力重构一个继承的Ember应用程序,它有相当多的非mvc混乱.我希望尽可能保持模块化,并希望在多个屏幕中重用各种ui组件,以帮助防止代码重复.
看起来网点是最好的方法.
现在,我有一个显示许多元素的UI,每个元素都使用模板化视图进行渲染.
{{#each item in controller}}
{{view App.ItemThumbView}}
{{/each}}
Run Code Online (Sandbox Code Playgroud)
此视图的右侧边栏是根据选择而更改的插座.当我选择一个项目时,我想在模板化的子视图中显示一个编辑操作列表,选中后,通过嵌套的插座显示正确的编辑UI.
实质上
+---------------------------------------------------+
| Parent Pane
|
| +------------------------------+ +----------+
| | Device Section | | Sidebar |
| | | | [Outlet] |
| | +--------+ +---------+ | | |
| | | Dev 1 | | Dev 2 | | | |
| | |[outlet]| | [outlet]| | +----------+
| | +--------+ +---------+ |
| +------------------------------+
+--------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
嵌套视图都共享相同的控制器 - 这是有道理的 - 但我需要能够将选定的视图连接到其相应的插座.我最初尝试连接插座时从未显示过.代码根本没有失败,因此控制器只是更新隐藏的插座.
如何在Ember中为嵌套视图定位正确的插座?(最好的情况是,我似乎能够触及侧栏插座,但不能触及嵌套设备模板中的插座.)这是否是首先在ember中实现上下文菜单的合理结构?
*澄清使用我当前的设置,每个设备项目使用相同的模板呈现.选中后,侧栏插座将使用某些设备的元信息进行更新,而所选设备视图也会将其插座连接到编辑菜单.一次只能连接一个设备项目的"编辑"插座.
在这里使用插座是否有意义,或者我是否应该将条件逻辑放入模板中以便根据需要显示编辑菜单?
更新以重述问题的最佳实践部分: …
我的问题与寻找轻量级移动HTML5/JavaScript框架的推荐略有不同
我正在加入一个针对ipad的JS/HTML5项目,目前使用Backbone.js进行MVC和Zepto进行dom操作.他们已经尝试了jQuery mobile,并发现列表性能令人印象深刻.
基本上我正在寻找一个具有非病毒操作系统许可证的替代移动Javascript UI框架(Sencha似乎与gpl 3,我想要一些纯粹关注ui小部件的东西),它提供了高性能的动态列表和一般的一套iOS风格的ui小部件.我确实有enyo的经验,但我不是特别喜欢它,所以这也是不可能的.
有什么建议?
查看有关ShadowDOM的文章,似乎是对DocumentFragments的增强.ShadowDOM的真正好处是什么?CSS特异性?我不能用Fragments做大致相同的事情吗?
我正在寻找各自的功能列表.例如,两者似乎都允许您在内存中组装dom树并离开主渲染路径.但是,ShadowDOM似乎具有作用域CSS的额外好处.
在什么情况下你会使用ShadowDOM vs你想要使用DocumentFragments的地方?
UPDATE
在仔细研究了这个之后,我看到这两种技术是完全正交的.
注意:由于问题已经结束,我自己无法回答.我最初把我的发现的细节放在下面的评论中,但想到更多的人会在这里查看文本.
Document Fragments是一个Javascript/DOM构造工具,用于创建DOM之外的非heirrchical节点集合(每个节点可以是其他节点的父节点).它们本质上是节点集合的包装器,一旦片段附加到DOM就会被放弃.DocumentFragments允许您在同一级别收集多个节点,并将它们作为兄弟节点附加到另一个DOM节点.
Shadow Dom就是在更大的渲染DOM中隔离副作用.ShadowDom允许您使用封装样式创建沙盒可重用组件.当基于ShadowDom的组件添加到更大的Web应用程序时,其CSS样式不会泄漏到应用程序的其余部分,应用程序自己的样式也不会影响组件的呈现.
请注意CSS组合器,例如/deep/,::shadow存在用于从父dom样式化(和选择)shadowDom组件,但这些组件在不久的将来被弃用.因此,建议使用ShadowDOM的可重用组件依赖CSS变量进行样式设置,如果它们打算由使用它们的应用程序进行自定义.
javascript html5 documentfragment shadow-dom angular2viewencapsulation
我目前正在我的工作场所讨论遗留Java Swing应用程序与d3.js图形的最终输出之间的接口设计.当前的应用程序是一个桌面统计探索工具,使用Java2d解析数据并输出图形.应用程序正在转换为具有Web前端的服务器/客户端应用程序.
目前,图形逻辑与Java2d代码紧密耦合.虽然在技术上是Wilkonson的图形语法的实现,但是图树的每个组件都呈现给java组件.
我建议重构图形系统以输出图形的结构化规范(json,xml,无论如何),然后可以将其传递给消费者(前端Web,ipad等)以进行实际的解析和渲染.这会将图形结构与实际渲染分离,理论上允许在任何客户端库或渲染格式中使用相同的输出/蓝图,无论是d3.js,three.js,svg/canvas/webgl,还是本机码.
这似乎对我有直观的意义,但我的同事非常反对这个想法.相反,他们建议调整系统以在服务器端生成d3 javascript代码,然后客户端将直接使用它.这将需要在每个图形的基础上实现所有图形设置代码(理论上使用一些模板引擎有条件地在结果html中包括js).我们的结果将直接与d3本身联系在一起.他们说好处是客户端不需要做任何事情来渲染图形输出.
我在这里错过了什么吗?从长远来看,后一种方法是否更为可取?或者我是否在前设计的正确轨道上?在生成javascript方法中我应该考虑一些好处吗?或者,我应该如何构建我的论点,支持序列化的图形规范,以便让更多的人加入我的设计?
我在Visual Studio中遇到了一大堆链接器错误,我甚至没有直接调用这些方法.我白天是一名java开发人员,但我有一个我需要用C++做的项目,打算在Windows机器上运行.因此,我在使用Visual Studio时陷入困境.
基本上,我有一个os项目,我添加了一个访问器方法.我将该项目编译为.lib文件(编译和链接正常).
然后我有自己的项目使用该lib.我在Project-> Properties - > Linker - > Input下包含了库,并在General - > Additional Lib Directories中设置了相应的目录.我已经在相应的文件中包含了标题,我只是调用其中一个类的构造函数...甚至没有调用我创建的方法.
代码编译,但我得到以下大量的链接器错误 - 主要是LNK2019和LNK2001错误.我尝试在不同的设置(lib,exe等)下重新编译,并且链接器错误似乎只是相乘.当我切换回之前的设置时,错误的数量仍保持在最高点.任何想法如何解决这一问题?
构建日志
Build build:Project:SpamCapture,Configuration:Debug | Win32
命令行:
创建临时文件"c:\ SpamCapture\SpamCapture\SpamCapture\Debug\RSP0000103081740.rsp",内容为[/ VERBOSE:LIB /OUT:"C:\SpamCapture\SpamCapture\SpamCapture\Debug\SpamCapture.exe"/ INCREMENTAL/LIBPATH: "C:\ SpamCapture\Config\Debug \"/ MANIFEST /MANIFESTFILE:"Debug\SpamCapture.exe.intermediate.manifest"/NODEFAULTLIB:"libcmtd.lib"/NODEFAULTLIB:"nafxcwd.lib"/ DEBUG/PDB:"c :\ SpamCapture\SpamCapture\SpamCapture\Debug\SpamCapture.pdb"/ SUBSYSTEM:CONSOLE/MACHINE:X86 KeyCapture_Config.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32 .lib uuid.lib odbc32.lib odbccp32.lib
"\调试\ Interaction.obj"
"\调试\ InteractionSet.obj"
"\调试\ LogReader.obj"
"\调试\ SpamCapture.obj"
"\调试\ StdAfx.obj的"
"\调试\ SpamCapture.res"
".\ Debug\SpamCapture.exe.embed.manifest.res"]创建命令行"link.exe @c:\ SpamCapture\SpamCapture\SpamCapture\Debug\RSP0000103081740.rsp/NOLOGO/ERRORREPORT:PROMPT"
输出窗口:
链接...链接:警告LNK4067:模糊的切入点; 选择'mainCRTStartup'搜索库搜索C:\ SpamCapture\Config\Debug\KeyCapture_Config.lib:搜索C:\ Program Files\Microsoft Visual Studio 8\VC\lib\kernel32.lib:搜索C:\ Program …
这是我工作中的一个问题。我有一些 TestNG 案例,如果在主要批次的测试案例中运行,则会对其他测试案例造成严重破坏。我没有遍历并更改所有测试用例,而是为所涉及的用例创建了一个组。我运行主测试套件,排除该组,然后进行第二个 Ant 调用来运行受影响的组。这样,所有测试用例都会通过,但我最终必须创建两个 TestNG 报告,以便第一个报告不会被第二组的结果覆盖。
所以这是我的问题:是否可以将第二个测试结果报告与第一个测试结果报告合并,或者我是否坚持两者?
在工作中,我遇到了一个问题,我们的应用程序的用户正在接收具有无效unicode字符(0xffff)的消息,根据标准,该字符永远不应该映射到符号.
作为一个快速的工作,我做了以下:
badStr.replace(/\uffff/g, " ");
Run Code Online (Sandbox Code Playgroud)
它按预期工作,并让用户继续使用该应用程序,直到找到更好的解决方案.
然而,当我正在玩这个时,我随机尝试了一个字符串替换"$$$$",它以某种方式折叠了"$$".
你可以亲眼看看.尝试在浏览器网址栏中粘贴以下行:
javascript: alert(String.fromCharCode(0xffff).replace(/\uffff/g, "@@@@"));
Run Code Online (Sandbox Code Playgroud)
结果是 @@@@
但
javascript: alert(String.fromCharCode(0xffff).replace(/\uffff/g, "$$$$"));
Run Code Online (Sandbox Code Playgroud)
结果是$$
这实际上似乎是任何字符串替换的问题,使用$$$$作为字符串替换.
都:
javascript: alert(String.fromCharCode(0x1234).replace(/\u1234/g, "$$$$"));
javascript: alert("hella".replace("h", "$$$$"));
Run Code Online (Sandbox Code Playgroud)
导致$$崩溃.
关于为什么字符串替换行为这样的任何想法?