我遵循Angular组件中的清理模式,如下所示:
class SomeComponent implements OnInit, OnDestroy {
private destroy$ = new Subject();
ngOnInit() {
service.someStream().takeUntil(this.destroy$).subscribe(doSomething);
}
ngOnDestroy() {
this.destroy$.next(true);
}
}
Run Code Online (Sandbox Code Playgroud)
这具有在组件被销毁时自动取消订阅的好处.
我的问题是:是否引用destroy$
无限期地粘贴,因为我没有调用this.destroy$.complete()
,或者在收集父类时是否会获得GC?
我正在使用ChromeLogger扩展程序(无耻插件)的CF接口,它使用HTTP标头将数据从服务器端语言记录到Chrome控制台.
在请求过程中,log()
可以多次调用该方法.对于每次通话,我都会以ChromeLogger正确显示数据所需的格式编写标题.在CF10中,这很好 - 每次后续调用都会setHeader()
覆盖以前设置的标题,并使用相同的名称.但是,在CF9中,我看到多个具有相同名称的标头.
此示例代码演示了此问题:
<cfscript>
pc = getPageContext().getResponse();
pc.setHeader( "test-header", "value 1" );
pc.setHeader( "test-header", "value 2" );
pc.setHeader( "test-header", "value 3" );
</cfscript>
Run Code Online (Sandbox Code Playgroud)
在CF9中,我看到三个名为"test-header"的标题,每个标题都有自己的值.在CF10中,我看到一个名为"test-header"的标题,其值为"value 3".根据这个方法的Java文档,后者是正确的(强调我的):
设置具有给定名称和值的响应标头.如果已设置标头,则新值将覆盖前一个标头.containsHeader方法可用于在设置其值之前测试标头的存在.
使用cfheader
标签具有相同的结果,大概是因为它只是包装了setHeader()
方法.
我知道我可以在请求过程中构建标题,然后setHeader()
在最后通过一次调用onRequestEnd()
,但我希望这个组件尽可能自包含 - 最终用户越少修改他们的代码来实现它,越多越好.
CF9中有没有其他方法可以覆盖现有的标题?
我正在开发一个应用程序,用于将用户上传的图像/文档的数据库和目录从我们的生产服务器传输到开发服务器.该应用程序是用Coldfusion编写的,但我不认为该语言与这个问题相关 - 它更多的是结构/架构问题,而不是语言特有的问题.
我将为我的示例编写伪代码,所以请不要选择语法.
当我看到类继承演示时,它通常很简单class Student extends Person() {}
.显然,学生是一个更专业的人,所以这是有道理的.
在我的应用程序中,我有一个类Site()
,其中包含相关信息,如DSN,文件上载目录等.我在一个类中执行我的SQL导出,我的文件上载导出在另一个类中,这两个类都是从站点类中调用的(伪代码):
class Site {
public function exportSql() {
sqlExport = new sqlExport(this.dsn);
sqlExport.createDumpAndZipItAndStuff();
}
public function exportUploads() {
uploadsExport = new uploadsExport(this.uploadDirectory);
uploadsExport.copyAndZipFilesAndStuff();
}
}
Run Code Online (Sandbox Code Playgroud)
除了控制从应用程序前端请求的流量流之外,Site类不会执行任何操作,其他所有内容都将传递到其中一个导出类.
这对我来说很好,但我想正确地构建它.现在,我必须将Site的属性传递给导出类的构造函数,然后使用这些参数设置导出类的属性.这会导致大量重复.
让我的导出类继承Site类以便我可以直接访问属性是否合适?导出类不是更专业的站点,就像我之前给出的Person/Student示例一样.相反,他们只是为Site类执行繁重的工作.
如果这不是适合继承的情况,我应该如何构建应用程序?正如我之前所说,我现在正在做的方式有效,但我想借此机会更多地了解设计模式,并以有意义的方式编写代码.
已经有一个答案发布到测试本身,可以在这里找到,但我似乎无法弄清楚为什么答案是正确的.
给我带来麻烦的部分测试是:
var keys = [];
var fruits = ['apple', 'orange'];
for(propertyName in fruits) {
keys.push(propertyName);
}
ok(keys.equalTo(['__', '__', '__']), 'what are the properties of the array?');
Run Code Online (Sandbox Code Playgroud)
如上所述的那个(显然)正确的答案是
ok(keys.equalTo(['0', '1', 'fruits.prototype'), 'what are the properties of the array?');
Run Code Online (Sandbox Code Playgroud)
我尝试插入答案 - 修复了语法错误 - 我的测试仍然失败.
在同一个测试文件中,另一个测试几乎相同,答案是我所期望的:
test("property enumeration", function() {
var keys = [];
var values = [];
var person = {name: 'Amory Blaine', age: 102, unemployed: true};
for(propertyName in person) {
keys.push(propertyName);
values.push(person[propertyName]);
}
ok(keys.equalTo(['name','age','unemployed']), …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个项目,我需要在一个查询中创建两个表.
我写的是这样的:
DROP TABLE Employee;
CREATE TABLE Employee(
Employee_Id CHAR(12)NOT NULL PRIMARY KEY,
First_name CHAR(30),
Last_name CHAR(30),
Address VARCHAR(50),
City CHAR,
State CHAR,
Salary INT,
Gender CHAR,
Age INT
);
DROP TABLE Job;
CREATE TABLE job(
Exempt_Non_Exempt_Status tinyint(1) NOT NULL PRIMARY KEY,
Job_title CHAR,
Job_description CHAR
);
Run Code Online (Sandbox Code Playgroud)
但即使我没有创建它,也会出现"未知表'作业'"之类的错误.
在对MySQL进行cfquery时,MYSQL在以下代码中给出了'字段列表'中的错误未知列'问题':
<cfquery name="qUpdateTheQuestion" datasource="testmaster">
INSERT INTO ETrueFalseQuestions
VALUES (<cfoutput>#newTypeID#</cfoutput>, `<cfoutput>#FORM.Question#</cfoutput>`, <cfoutput>#FORM.truefalse#</cfoutput>
Run Code Online (Sandbox Code Playgroud)
我尝试了所有我想到的尝试来解决这个问题,以及我在尝试搜索解决方案时发现的一些建议,例如使用反引号而不是单引号.
我也不明白为什么它会搜索名为Question的列,因为这是FORM.Question的值,并根据输入到表单中的内容而更改.任何建议将不胜感激.
尝试此代码时,我遇到了each()方法的奇怪行为:
def xml = new XmlSlurper().parseText('''
<list>
<item a="1">a</item>
<item a="2">b</item>
<item a="1">c</item>
</list>
''')
def i = 0
xml.'**'.findAll { it.@a=='1' }.each {
println "hi" + i
}
Run Code Online (Sandbox Code Playgroud)
结果只是hi0
,但我希望如此hi0hi1
.这种行为是错误还是每种语言设计?第二个结果只有在我写println "hi" + i++
而不是当前的闭包体时才提供,所以当每个项目的内容不同时......
coldfusion ×3
mysql ×2
angular ×1
cfquery ×1
chromelogger ×1
coldfusion-9 ×1
each ×1
groovy ×1
inheritance ×1
javascript ×1
oop ×1
reflection ×1
rxjs ×1
sql ×1