假设您有一个组件,其工作是创建一些DOM节点(例如,使用jquery):
function PageFiller() {
}
PageFiller.prototype.fillPage = function () {
this.dom = $("<div/>", {
"class" : "hello",
text : "Hello world"
});
$("body").append(this.dom);
}
Run Code Online (Sandbox Code Playgroud)
假设另一个组件使用它来填充DOM,而不保留对"PageFiller"的引用
function Main() {
}
Main.prototype.start = function () {
var filler = new PageFiller();
filler.fillPage();
};
var main = new Main()
main.start();
Run Code Online (Sandbox Code Playgroud)
不要假设在那之后(在相同的范围内),有人残酷地清除DOM:
$(".hello").remove();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,内存布局是什么?我是否用PageFiller实例泄露了内存?
我有点不确定PageFiller实例将在何时收集垃圾(如果它曾经发生),因为它持有对表示不存在的DOM部分的jquery对象的引用?或者它与DOM无关,因为根据我的理解,实际的 DOM对象生活在与常规JS变量不同的堆中(除非我在这里弄错了..)
更新:如果对主页对象保留对PageFiller的引用,那么事物的变体就是:
Main.prototype.start = function () {
this.filler = new PageFiller();
filler.fillPage();
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Main对象具有对PageFiller对象的引用,该对象本身包含对JQ对象的引用; 在'remove'之后,JQ对象仍然存在于内存中,但是指向不存在的DOM节点,对吧?
我是否正确地说,在原始示例中,只要main.start()完成:
其他情况:
这次是一个小变化,事件处理程序使事情变得复杂:
PageFiller.prototype.fillPage = function () {
var self = …Run Code Online (Sandbox Code Playgroud) 我一直在阅读Misko Hevery 关于依赖注入的经典 文章,基本上是"将对象图创建代码与代码逻辑分离".
主要想法似乎是"摆脱'新'运营商',将它们放入专用对象('工厂')并注入你所依赖的一切."
现在,我似乎无法理解如何使用由几个其他组件组成的对象,并且其工作是将这些组件隔离到外部世界.
一个View类,表示几个字段和一个按钮的组合.所有组件都依赖于图形ui上下文,但您希望将其隐藏在每个子组件的接口后面.
所以像(在伪代码中,语言并不重要我猜):
class CustomView() {
public CustomView(UIContext ui) {
this.ui = ui
}
public void start() {
this.field = new Field(this.ui);
this.button = new Button(this.ui, "ClickMe");
this.button.addEventListener(function () {
if (field.getText().isEmtpy()) {
alert("Field should not be empty");
} else {
this.fireValueEntered(this.field.getText());
}
});
}
// The interface of this component is that callers
// subscribe to "addValueEnteredListener"..)
public void addValueEnteredListener(Callback ...) {
}
public void fireValueEnteredListener(text) {
// Would call each …Run Code Online (Sandbox Code Playgroud) 我正在尝试配置TLS服务器以在连接时返回证书链。
我想创建一个带有证书链的tls.Config:
Run Code Online (Sandbox Code Playgroud)// Certificates contains one or more certificate chains // to present to the other side of the connection. // Server configurations must include at least one certificate // or else set GetCertificate. Certificates []Certificate
假设我的链为root -> inter -> server,我可以独立加载每个证书,并使用一个列表,但是只有serverCert发送到SSL客户端。
我正在按照以下方式进行操作:
root, err := tls.LoadX509KeyPair("root.crt", "root.key")
inter, err := tls.LoadX509KeyPair("inter.crt", "inter.key")
server, err := tls.LoadX509KeyPair("server.crt", "server.key")
config := tls.Config{
Certificates : []tls.Certificates{root, inter, server}
}
config.BuildNameFromCertificates()
Run Code Online (Sandbox Code Playgroud)
我是否缺少明显的东西?顺序重要吗?
是否可以编写一个不呈现任何内容的组件,例如,如果其游标数据为空?
我不能做
(defn count-or-nothing [list-cursor owner]
(reify
om/IRender
(render [_]
(if (not (empty? list-cursor))
(dom/div nil "You have some elements !")))))
Run Code Online (Sandbox Code Playgroud)
if子句返回nil,这会导致错误消息
未捕获的错误:不变违规:ReactCompositeComponent.render():必须返回有效的ReactComponent.您可能已返回null,undefined,数组或其他一些无效对象.
我通过渲染空的跨度,但听起来很笨拙.我是否必须重构我的代码并将测试"排除"在此组件之外?
假设我有以下类型声明:
type Foo = 'a' | 'b' | 'c';
type Bar = 'a' | 'b' ;
Run Code Online (Sandbox Code Playgroud)
是否可以表示Bar为的子集Foo?
我知道始终可以将表示Foo为的超集Bar,但就我而言,反过来会感觉更符合领域。
除了C++之外,哪些非玩具语言与C 具有直接或易于使用的兼容性? 就像在"我可以在那里使用一个C库,并编译我的代码而不必查找,编写或配置某种包装器."
我知道很多语言通过某种形式的外部调用或绑定与C兼容(我一直在Java,Ruby,Python等中使用绑定,所以我知道它可以完成).但是你依赖某人(可能是你)来编写和维护你想要使用的所有库的绑定,并且绑定必须适用于所有平台,等等.
比C++更具表现力的语言有这个功能吗?
感谢所有人提到swig或相关的包装生成工具.我知道那些存在,但我不认为它们真的像C-> C++集成一样容易......但是然后与C集成可能是C++中唯一更容易的东西;))
我正在尝试构建一个flex项目,将其链接到一些RLS.在Flex Builder中设置项目时,相应的"构建配置"(我通过将-dump-config添加到编译器选项中获得)生成(以及其他)标记,如下所示:
<runtime-shared-libraries>
<url>some-lib.swf</url>
<url>some-other-lib.swf</url>
</runtime-shared-libraries>
Run Code Online (Sandbox Code Playgroud)
现在,我正在尝试使用mxmlc ant任务构建项目,但我似乎无法添加对共享库的任何引用.我认为这样的事情会有所帮助,但它没有:
<!-- Skipping attributes that I don't think are relevant ... -->
<mxmlc ....>
...
<runtime-shared-library-path>
<url rsl-url="some-lib.swf"></url>
<url rsl-url="some-other-lib.swf"></url>
</runtime-shared-library-path>
</mxmlc>
Run Code Online (Sandbox Code Playgroud)
那么我在这里可以缺少什么呢?
谢谢
假设我有这些结构(没有花哨的指针,一切都是可复制的)
\n#[derive(Debug, Copy, Clone)]\nstruct Item {\n id: u32,\n pub value: u32\n}\nRun Code Online (Sandbox Code Playgroud)\n我可以创建一个结构来保存此类项目的 vec:
\n#[derive(Debug)]\nstruct Container {\n next_id: u32,\n items: Vec<Item>\n}\nRun Code Online (Sandbox Code Playgroud)\n如果您知道确切的位置,添加元素和更改它们相当容易:
\n#[derive(Debug, Copy, Clone)]\nstruct Item {\n id: u32,\n pub value: u32\n}\nRun Code Online (Sandbox Code Playgroud)\n这使得这样的测试通过:
\n #[test]\n fn can_change_first() {\n let mut c = Container::new();\n assert_eq!(c.add(), 0);\n c.change_first(22);\n assert_eq!(c.lookup(0).unwrap().value, 22);\n }\nRun Code Online (Sandbox Code Playgroud)\n但是,假设我想查找和元素并找到它。我不想items直接公开 vec,但建议使用一个 API 来这样做:
#[test]\n fn can_lookup_and_change() {\n let mut c = Container::new();\n assert_eq!(c.add(), 0);\n c.change_at(0, 22);\n assert_eq!(c.lookup(0).unwrap().value, 22);\n }\nRun Code Online (Sandbox Code Playgroud)\nna\xc3\xafve …
ant ×1
apache-flex ×1
c ×1
c++ ×1
go ×1
javascript ×1
jquery ×1
mxmlc ×1
om ×1
rust ×1
ssl ×1
types ×1
typescript ×1
unit-testing ×1