我是一名经验丰富的Java程序员,但我在大约十年来第一次看到一些JavaScript/HTML5的东西.我完全不知道应该是最简单的事情.
作为一个例子,我只想绘制一些东西并为其添加一个事件处理程序.我确定我做了一些愚蠢的事情,但我已经搜索了所有内容并且没有任何建议(例如,这个问题的答案: 添加onclick属性以使用JavaScript输入).我正在使用Firefox 10.0.1.我的代码如下.您将看到几条注释行,并在每一行的末尾是对(或什么不)发生的描述.
这里的语法是什么?我要疯了!
<html>
<body>
<canvas id="myCanvas" width="300" height="150"/>
<script language="JavaScript">
var elem = document.getElementById('myCanvas');
// elem.onClick = alert("hello world"); - displays alert without clicking
// elem.onClick = alert('hello world'); - displays alert without clicking
// elem.onClick = "alert('hello world!')"; - does nothing, even with clicking
// elem.onClick = function() { alert('hello world!'); }; - does nothing
// elem.onClick = function() { alert("hello world!"); }; - does nothing
var context = elem.getContext('2d');
context.fillStyle = '#05EFFF';
context.fillRect(0, 0, …Run Code Online (Sandbox Code Playgroud) 在我的JSFiddle中,我只是试图遍历一个元素数组.正如日志语句所证明的那样,该数组是非空的.然而这个电话给forEach了我(不是那么有帮助)"Uncaught TypeError:undefinedis not a function"错误.
我必须做一些愚蠢的事; 我究竟做错了什么?
我的代码:
var arr = document.getElementsByClassName('myClass');
console.log(arr);
console.log(arr[0]);
arr.forEach(function(v, i, a) {
console.log(v);
});Run Code Online (Sandbox Code Playgroud)
.myClass {
background-color: #FF0000;
}Run Code Online (Sandbox Code Playgroud)
<div class="myClass">Hello</div>Run Code Online (Sandbox Code Playgroud)
如果我的网址是http://www.something.com/foo/bar/index.html?color=yellow&animal=rat,似乎:
$location.path() 将返回 foo/bar/index.html$location.absUrl() 将返回 http://www.something.com/foo/bar/index.html?color=yellow&animal=rat$location.url() 将返回 foo/bar/index.html?color=yellow&animal=rat有什么功能会回来http://www.something.com/foo/bar/index.html吗?
或者我是否必须使用protcol,host,port等函数构建自己(或者自己删除查询参数)?
这让我疯了很长时间; 我想知道是否有办法解决它?希望我能很好地描述这种情况.
为简单起见,请说我有以下目录结构:~jer/dirA和~jer/dirB
在emacs的shell中,我从顶级目录(~jer)开始,输入'cd dir',然后点击tab.
我的窗口分为2,我有一个*Completions*缓冲区.这很酷; 我看到我的选择是'dirA'和'dirB',我键入'A'(所以我的完整命令是'cd dirA')然后点击回车,但*Completions*缓冲区保持打开状态,我必须手动关闭它(通常使用'Cx 1',因为我在shell缓冲区中我要保存,但是如果我已经有一个拆分窗口,那就更烦人了,因为*Completions*缓冲区代替了另一个已经存在,我必须切换到那个并点击Cx k手动杀死它).
所以我的问题是:有没有办法让*Completions*在我完成命令后自动死亡?在上面的示例中,只要在输入'cd DirA'后按Enter键,我就希望缓冲区被杀死.
谢谢,我希望这是有道理的.注意,我不认为这是重复的是否有任何方法可以自动关闭Emacs中的文件名完成缓冲区?,因为那是关于使用find-file(在这种情况下,*Completions*缓冲区确实关闭.
实际上,如果节点是单线程的,我不完全理解为什么我的代码不在堆栈跟踪中.也许我从根本上误解了一些问题,但是为什么我的应用程序有时会因为堆栈跟踪没有我写的任何东西而死?
我正在使用node/express编写一个非常简单的代理服务器.作为一个例子,我定期得到这个"套接字挂起错误":
Error: socket hang up
at createHangUpError (_http_client.js:250:15)
at Socket.socketOnEnd (_http_client.js:342:23)
at emitNone (events.js:91:20)
at Socket.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:926:12)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickCallback (internal/process/next_tick.js:98:9) code: 'ECONNRESET' }
Run Code Online (Sandbox Code Playgroud)
由于堆栈跟踪中的javascript文件都不是我的,我不知道它来自何处.它基本上是试验和错误,试图捕获错误并添加.on样式错误处理程序,直到找到正确的位置.
我觉得我从根本上错过了一些东西 - 为了调试这样的错误,我应该做些什么呢?如果我看不到(在我的代码中)是什么导致它,我怎么知道在哪里处理它?我怎么知道我是否应该使用try/catch块,或类似的东西request.on('error') {...}?
我正在开发一个使用嵌入式Jetty的项目(不幸的是我只是"继承"了项目的服务器端,并且对Jetty及其配置的使用不是很熟悉).
刚出现一个奇怪的案例 - 我会尽力描述:
基于Web的UI(使用AngularJS,来自不同的域,因此使用CORS)发送POST请求以更改服务器上某些内容的状态.这在过去的某个时刻起作用(它可能是大约一个月前使用过的).
昨天这停止了工作.检查REST调用,我看到首先发出OPTIONS请求.POST的内容类型是application/json,所以基于我读过的内容,这是正确的.我不确定为什么之前没有发送过 - 有可能该公司最近更新了Chrome版本,旧版本没有发送预检请求,但这只是猜测.在任何情况下,我认为这是我的应用程序中为JetS配置CORS的相关代码:
FilterHolder holder = new FilterHolder(new CrossOriginFilter());
holder.setInitParameter(CrossOriginFilter.ALLOWED_ORIGINS_PARAM, "*");
holder.setInitParameter(CrossOriginFilter.ACCESS_CONTROL_ALLOW_CREDENTIALS_HEADER, "true");
appHandler.addFilter(holder, "/*", EnumSet.of(DispatcherType.REQUEST));
Run Code Online (Sandbox Code Playgroud)
一切都适用于POST请求.我可以通过使用--disable-web-security标志启动Chrome来验证这一点.没有发送OPTIONS请求,并且POST正常工作.
我的想法是,因为它适用于POST,它不是授权或安全问题 - 它只是没有正确配置Jetty来处理预检请求(它只返回401).
我找不到很多关于嵌入式Jetty的文档,以及哪些CrossOriginFilter常量在调用setInitParameter时用作属性键(而且,因为该方法调用的第二个参数是一个String,我真的不知道如何格式化值).
我应该在CrossOriginFilter上设置哪些参数来处理OPTIONS请求?如果我上面说过任何错误或做出任何错误的假设,请纠正我!我对这方面的经验非常有限.
我有一个状态为 200 OK 的响应,但它在网络请求列表中显示为红色。我认为是状态决定了这一点,但显然还有其他事情。它是什么?
我想在ng-repeat块中添加带有插值表达式的HTML注释.但是,当我尝试这样做时,表达式不是插值的.例如:
<tr ng-repeat="item in items"
<!-- ID that I don't want the user to see, but want for debugging = {{item.id}} -->
<td>{{item.prettyName}}</td>
<td>{{item.someProperty}}</td>
<td>{{item.someOtherProperty}}</td>
</tr>
Run Code Online (Sandbox Code Playgroud)
当我查看DOM(即Chrom DevTools中的Elements选项卡)时,我只看到未插入的字符串("{{item.id}}")而不是插值.
这里的语法是什么?
我正在使用带有打字稿的反应。我有一个返回 jsx 中的组件的函数:
function TestComponent(str: string) {
return <span>Hello, your string was {str}</span>
}
Run Code Online (Sandbox Code Playgroud)
假设该函数是合理的(是吗?),我如何在更多 jsx 代码中调用它?
我努力了:
<TestComponent str="abcde" />
<TestComponent str={'abcde'} />
<TestComponent {'abcde'} />
<TestComponent {str:'abcde'} />
Run Code Online (Sandbox Code Playgroud)
但我怀疑我错过了一些关于函数参数如何传递的更基本的东西(我对反应和打字稿都很陌生)。
谢谢。
我是AngularJS的相对入门者,正在编写一个具有各种可重用组件的应用程序(例如,同一张表可能在屏幕上出现5次,但列数略有不同-如有必要,我可以详细介绍)。其他人也会想编写使用这些组件的代码。同样,多个组件将要从相同的来源中提取数据,并且多个人将要进行相同的REST调用以获取数据。
我想到的一般架构:
举一个简单的例子,一条指令将使用ng-repeat打印一个名称列表。服务将具有一个“公共”函数getNames(),该函数返回名称列表。我正在编写一个应用程序-我使用“ canned”指令和服务,我编写了一个将服务作为依赖项的控制器,调用getNames()函数并将结果返回到指令。我的HTML页面像其他任何HTML元素一样简单地使用指令。
我的主要问题-将数据放入指令的最佳方法是什么?我知道就范围而言,有很多选择,但是必须在我的控件中创建一个具有特定名称的变量并“神奇地”工作似乎是错误的。
从广义上讲,这是否合理?我基本上将指令和服务视为开发人员将使用的公共API。