我无法弄清楚为什么原型会在dom:loaded事件和AJAX处理程序中抑制错误消息.
鉴于以下HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Conforming XHTML 1.1 Template</title>
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript">
document.observe('dom:loaded', function() {
console.log('domready');
console.log(idontexist);
});
</script>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
domready事件触发,我在控制台中看到日志,但没有任何错误的迹象.如果你将console.log(idontexist);线移出处理程序,你就得到了
idontexist没有定义
控制台中出错.我觉得有点怪异,在其他事件处理程序,如"点击",你会得到错误信息,似乎这仅仅是dom:loaded有这个问题.
AJAX处理程序也是如此:
new Ajax.Request('/', {
method: 'get',
onComplete: function(r) {
console.log('xhr complete');
alert(youwontseeme);
}
});
Run Code Online (Sandbox Code Playgroud)
你不会看到任何错误.这是使用prototype.js 1.6.1,我在文档中找不到这种行为的任何迹象,也没有在这些处理程序中启用错误报告的方法.
我尝试使用FireBug的调试器逐步执行代码,当它遇到dom:loaded处理程序中缺少的变量时,它似乎跳转到名为K的第53行上的函数:
K: function(x) { return x }
Run Code Online (Sandbox Code Playgroud)
但是怎么样?为什么?什么时候?我在那里看不到任何try/catch块,程序流如何在那里结束?
我知道我可以通过dom:ready在try/catch块中包装我的处理程序来使错误可见,但这不是一个非常舒服的选择.同样适用于为AJAX调用注册全局onException处理程序.
为什么它甚至可以抑制错误?有人遇到过这个吗?
我发现在大多数知名的javascript库中都缺少许多高级函数,比如jquery,YUI等.以字符串操作为例,startsWith,endsWith,contains,lTrim,rTrim,trim,isNullOrEmpty ......等.这些功能实际上非常常见.
我想知道是否存在填充这些空白(包括但不限于字符串操作)的javascript库的javascript库/插件?
如果库不覆盖原型会很棒.
在Coders工作中,Douglas Crockford讨论了浏览器中的错误如何导致Javascript成为一种复杂,笨重的语言,并且修复它是一个问题22.在使用DOM脚本和Ajax 开始JavaScript时, Christian Heilmann说类似的"各种各样的用户代理,具有不同的技术细节[...]对JavaScript来说是一个巨大的危险."
为什么JS没有破解新版本?语言设计中是否存在固有的东西,其中向后兼容性变得必须?
更新
为什么javascript不能并行运行多个引擎?类似于.NET在同一台机器上运行版本2,3和4的方式.
我看到很多函数返回的不是结果而是函数.下面的示例显示函数getWindow返回函数.为什么它不能只返回变量"赢"?当我返回结果和功能时?谢谢.
var A = function(){};
A.prototype=
{
getWindow : function()
{
var win = new B.window();
return (
this.getWindow = function()
{
return win;
})();
}
}
Run Code Online (Sandbox Code Playgroud) 我试图让这个工作,但我很努力.当我检查success回调时,我的收藏结果为空fetch.它没有给我任何明显的错误parse.这是我的代码:
我的收藏:
VOR.Collections.GridItems = Backbone.Collection.extend({
model : VOR.Models.GridItem,
url: "assets/data/grid.json",
parse: function(response){
var self = this;
_.each(response, function(griditem){
switch(griditem.type){
case "news":
self.add(new VOR.Models.NewsGridItem(griditem));
break;
default:
self.add(new VOR.Models.StandardGridItem(griditem));
break;
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
这就是我创建集合的方式:
griditems = new VOR.Collections.GridItems();
griditems.fetch({
error: function(e) {console.log(e);},
success: function(msg) {
console.log(msg)
});
Run Code Online (Sandbox Code Playgroud)
当我控制日志时,msg我得到:对象{length = 0,models = [0],_ byId = {...},更多...}
我还在parse集合中记录了该函数,它通过JSON文件运行就好......任何关于这里可能出错的想法?msg对象的长度应为5..ie,即parse函数循环和(应该)将模型添加到集合的次数.
我目前正在推出一个javascript框架模式作为客户端开发的架构,用于即将开发的大型应用程序.
我希望使用模块观察器模式,其中我开发的每个控件都有自己的javascript文件,不保留其他控件的知识.
从为我的应用程序设计这个框架,我希望集成我的模块的测试机制 - 一个javascript的单元测试机制.我不知道有任何这样的框架或我如何设置这样的框架.有什么建议?
作为此类测试的一部分,我还需要模拟http请求.
我将在开发中使用的库是jquery.
我们为前端生成的大多数应用程序都使用Grails,我们喜欢它,但我们正在探索Javascript框架,例如backbone.js,ember.js,用于模板化,可重用性.我们对json感到舒服和熟悉,并且想知道对于与Grails一起使用的Javascript框架有哪些经验和建议.
想了解评估标准,实施成本和涉及的学习曲线.
我有以下问题:我使用Javascript onclick事件来更改链接的href.它就像一个魅力,但只有当用户点击一个链接时.如果链接使用"在新标签中打开"功能 - onclick事件将不会触发,href将永远不会更改.有没有办法处理这样的事件?也许使用jQuery或其他一些JS Framework?
例:
<a href="some_url" onclick="this.href = 'some_other_url'">Link</a>
Run Code Online (Sandbox Code Playgroud)
非常感谢!
我有如下定义的用户对象.
$scope.users = [{id: 1, name: 'Adam', friends: [{name: 'John', age: 21, sex: 'M'}, {name: 'Brad', age: 32, sex: 'M'}]}]
Run Code Online (Sandbox Code Playgroud)
然后我有以下代码:
<div ng-repeat="user in users>
<input type="text" ng-model="searchText">
<div ng-repeat="friend in user.friends | filter:searchText">
{{user.name}} {{friend.name}} {{friend.age}}
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
现在,当我在文本框中键入文本:'searchText'时,我希望过滤器显示用户的名称和朋友的姓名/年龄.任何人都可以帮我解决这个问题吗?
如果我是正确的,那么我认为我需要为此创建自定义过滤器,还是有其他方法可以实现此目的?
由于我是backbonejs和underscorejs的新手,我想知道那些核心意义.
由于我的理解underscorejs就像jQuery库一样,我们在backbonejs中使用这些函数.
我们无法开发没有下划线的backbonejs应用程序.
我对吗?如果我的理解是错误的,请用简单的单词/例子清楚说明.
提前致谢.
javascript ×8
jquery ×3
backbone.js ×2
angularjs ×1
dom-events ×1
grails ×1
groovy ×1
high-level ×1
inheritance ×1
java ×1
prototypejs ×1
testing ×1
unit-testing ×1