通过Dojo执行AJAX时,我们可以传递两个回调,一个在成功请求后执行,另一个在错误后执行:
dojo.xhr("GET",{
url: myURL,
content: messageContents,
load: function(returnData, ioArgs){
//This is called on success
},
error: function(returnData, ioArgs){
//This is called on failure
}
});
Run Code Online (Sandbox Code Playgroud)
我在文档中找不到什么被定义为错误.我猜任何返回码> = 400的东西,但我不确定.
我正在转换一个相对较大的Javascript,目前只能在Internet Explorer上运行,以使其在其他浏览器上运行.由于代码广泛使用XPath,我们提供了一些兼容性功能,使事情变得更容易
function selectNodes(xmlDoc, xpath){
if('selectNodes' in xmlDoc){
//use IE logic
}else{
//use W3C's document.evaluate
}
}
Run Code Online (Sandbox Code Playgroud)
这大部分工作正常但我们只是遇到了IE中的位置从零开始的限制,但在其他浏览器使用的W3C模型中,它们是基于单一的.这意味着要获得我们需要//books[0]在IE和//books[1]其他浏览器中执行的第一个元素.
第一个想法是使用正则表达式向查询中出现的所有索引添加一个,如果我们使用document.evaluate版本:
function addOne(n){ return 1 + parseInt(nStr, 10); }
xpath = xpath.replace(
/\[\s*(\d+)\s*\]/g,
function(_, nStr){ return '[' + addOne(nStr) + ']'; }
);
Run Code Online (Sandbox Code Playgroud)
这种基于正则表达式的解决方案是否相当安全?
例如,它将无法替换索引,//books[position()=1]但由于IE似乎不支持position()我们的代码没有使用,我认为这种特殊情况不会成为问题.
我下载了Sarissa,看看他们是否有办法解决这个问题,但看了源代码后他们显然没有?
我想在W3C版本中添加一个,而不是在IE版本中减去一个以减轻我的转换工作量.
我们决定通过设置选择语言来重写代码以在IE中使用适当的XPath
xmlDoc.setProperty("SelectionLanguage", "XPath");
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用原始递归函数在haskell中创建一个模数函数.我知道这是可能的(因为它在维基百科上的示例函数列表中)
而且我知道我在逻辑上也是这样做的..但我无法实现它!
IE,逻辑是(不是原始递归或haskell)
function mod(a, b){
while(a > b)
a -= b
return a;
}
Run Code Online (Sandbox Code Playgroud)
我可以使用递归定义(再次不是haskel)
function mod(a, b){
if(a < b) return a;
return mod(a - b, b);
}
Run Code Online (Sandbox Code Playgroud)
但我似乎无法使用原始递归函数来实现它.我不能做的是<b的逻辑
我认为要真正解决我的问题我需要某种定义的逻辑,例如(再次不是haskel)
reduce(a, b)
= a >= b -> a-b
otherwise x
Run Code Online (Sandbox Code Playgroud)
如果有人能帮我解决这个问题,我真的很感激,谢谢
编辑::我想可能定义一个模数函数利用除法,即mod(a,b)= a - (a/b)*b,但由于我的原始递归函数除法依赖于模数我不能做哈哈
对于单元测试,我希望能够检查某个返回的对象是否是XML文档.这样做的最佳方法是什么?
我目前正在测试doc.implementation(第一个想到的DOM属性)但是有更好的方法吗?另外,有没有一种很好的方法来区分HTML文档中的XML文档?
假设我有一个HTML结构
<div id="a">
<div id="b">
<div id="c"></div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
要使用querySelectorAll查询"a"的子项,我可以执行类似的操作
//Get "b", but not "c"
document.querySelectorAll('#a > div')
Run Code Online (Sandbox Code Playgroud)
我的问题是:是否可以在没有ID的情况下直接引用节点?我试过了
var a_div = document.getElementById('a')
a_div.querySelectorAll('> div') //<-- error here
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误,告诉我我使用的选择器无效.
如果有人想知道,我真正的用例会更复杂,比如'> .foo .bar .baz'所以我宁愿避免手动DOM遍历.目前我正在为root div添加一个临时id,但这似乎是一个丑陋的黑客......
我刚刚和Lua玩了一下,尝试了Koneki eclipse插件,非常好看.问题是,当我在一个函数中进行更改时,我正在调试,此时保存更改时更改无效.所以我被迫重启应用程序.如果我可以在调试器中进行更改并且它们将在运行中变得非常有效,例如使用Smalltalk,或者在Java中使用热代码替换,可能会有所改进.有人知道这是否可行?
我正在使用ocamllex为脚本语言编写词法分析器,但我面临与我的评论规则的冲突.
我希望允许我的命令参数不加引号,只要它们只包含字母数字字符和斜杠"/"即可.例如:
echo "quoted argument !@#%" /this/second/argument/is/unquoted
Run Code Online (Sandbox Code Playgroud)
另外,我的一个先决条件是带有"//"的C++样式注释
//this is a comment
echo hello world
Run Code Online (Sandbox Code Playgroud)
这带来的问题是这样的
echo foo//comment
Run Code Online (Sandbox Code Playgroud)
我希望我的词法分析器产生一个"foo"令牌,同时也保持"//"不变,以便在下次我向词法分析器询问令牌时使用它.那可能吗?这样做的原因是输入缓冲区可能还没有到达注释的末尾,我宁愿立即返回"foo"令牌而不是不必要地阻止尝试急切地使用注释.
我有一个鼠标活动课程.我正在使用dojo b/c我喜欢它的OO方法
dojo.declare("MouseObject", null, {
constructor: function(){},
onclick : function(){...},
_onClick : function(){...}
});
Run Code Online (Sandbox Code Playgroud)
_onClick()侦听窗口生成的鼠标按下/释放事件并确定是否发生了单击.如果有,onClick()则被称为.onClick()执行所有可能的点击共同的功能,因此每次用户点击时都需要调用它.
有时用户可能想要扩展功能onClick()是否仍然存在原始功能而无需复制粘贴它?我能想到的两种方式,我都不喜欢
dojo.declare("MouseObjectChild", [MouseObject], {
constructor: function(){},
onclick : function(){this.inherited(arguments);...}
});
Run Code Online (Sandbox Code Playgroud)
这有一个缺点,我必须继续创建我不需要的新类,并且两个添加一个中间函数
dojo.declare("MouseObject", null, {
constructor: function(){},
onclick : function(){this._onClick()...}, //child onClick
_onClick : function(){...}, //parent onClick
__onClick : function(){...} //listener
});
Run Code Online (Sandbox Code Playgroud)
但这看起来不是很好的代码
作为赏金,我需要有关如何最好地解决程序 - 用户交互的专家建议.如果程序提供了一个关键功能,例如在画布上绘制一个圆圈,那么用户如何最好地与之交互.如果用户想在圆圈后面画一个三角形怎么办?圆圈前方的一个正方形?然后该程序必须提供前后方法,如下所示:
beforeDraw();
draw();
afterDraw();
Run Code Online (Sandbox Code Playgroud)
这被认为是好设计吗?我应该把函数指针放在一个数组中并按顺序调用它们吗?
我正在尝试调试仅在IE中发生的"未找到属性"异常.坏的部分是这个异常被捕获和处理,我只能弄清楚如何使IE 9调试器暂停未捕获的异常(Ctrl + Shift + E).
我不能暂时删除相关的try-catch子句而不会弄乱我的程序逻辑,我宁愿不必逐步手动操作调试器.如何轻松找到生成异常的行?
建议在DOCTYPE之后,在根元素之前的任何注释之后,在html元素的开始标记之后(如果没有省略),以及在html元素内但在head元素之前的任何注释之后插入换行符. .
这个推荐背后的原因是什么?写作之间是否有区别?
<!DOCTYPE html>
<html>
<head>...
Run Code Online (Sandbox Code Playgroud)
和
<!DOCTYPE html><html><head>...
Run Code Online (Sandbox Code Playgroud)
?