小编hug*_*omg的帖子

Dojo考虑XHR请求错误是什么?

通过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 ajax dojo

6
推荐指数
1
解决办法
2226
查看次数

IE中的XPath查询使用从零开始的索引,但W3C规范是基于一的.我该如何处理差异?

问题

我正在转换一个相对较大的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)

javascript internet-explorer xpath cross-browser

6
推荐指数
1
解决办法
1566
查看次数

haskell模数原始递归

我正在尝试使用原始递归函数在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,但由于我的原始递归函数除法依赖于模数我不能做哈哈

primitive haskell functional-programming

6
推荐指数
1
解决办法
1934
查看次数

我应该如何测试对象是否是XML文档(以跨浏览器的方式)

对于单元测试,我希望能够检查某个返回的对象是否是XML文档.这样做的最佳方法是什么?

我目前正在测试doc.implementation(第一个想到的DOM属性)但是有更好的方法吗?另外,有没有一种很好的方法来区分HTML文档中的XML文档?

javascript xml

6
推荐指数
1
解决办法
5691
查看次数

使用querySelectorAll时,有没有办法引用上下文节点的直接子节点而不使用ID?

假设我有一个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,但这似乎是一个丑陋的黑客......

javascript css-selectors selectors-api

6
推荐指数
2
解决办法
3822
查看次数

在Lua中编写代码"在调试器中"的方法?

我刚刚和Lua玩了一下,尝试了Koneki eclipse插件,非常好看.问题是,当我在一个函数中进行更改时,我正在调试,此时保存更改时更改无效.所以我被迫重启应用程序.如果我可以在调试器中进行更改并且它们将在运行中变得非常有效,例如使用Smalltalk,或者在Java中使用热代码替换,可能会有所改进.有人知道这是否可行?

lua koneki

6
推荐指数
1
解决办法
128
查看次数

在ocamllex中是否有可能定义一个在不消耗它的情况下向前看下一个角色的规则?

我正在使用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"令牌而不是不必要地阻止尝试急切地使用注释.

ocaml ocamllex

6
推荐指数
1
解决办法
1043
查看次数

如何重用和覆盖继承的javascript函数

我有一个鼠标活动课程.我正在使用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)

这被认为是好设计吗?我应该把函数指针放在一个数组中并按顺序调用它们吗?

javascript dojo function redefine reusability

5
推荐指数
1
解决办法
2343
查看次数

如何使Internet Explorer Javascript调试器也在捕获的异常上暂停?

我正在尝试调试仅在IE中发生的"未找到属性"异常.坏的部分是这个异常被捕获和处理,我只能弄清楚如何使IE 9调试器暂停未捕获的异常(Ctrl + Shift + E).

我不能暂时删除相关的try-catch子句而不会弄乱我的程序逻辑,我宁愿不必逐步手动操作调试器.如何轻松找到生成异常的行?

javascript debugging internet-explorer

5
推荐指数
1
解决办法
2587
查看次数

为什么HTML5标准建议在<html>开始标记之后插入换行符?

根据HTML5标准:

建议在DOCTYPE之后,在根元素之前的任何注释之后,在html元素的开始标记之后(如果没有省略),以及在html元素内但在head元素之前的任何注释之后插入换行符. .

这个推荐背后的原因是什么?写作之间是否有区别?

<!DOCTYPE html>
<html>
<head>...
Run Code Online (Sandbox Code Playgroud)

<!DOCTYPE html><html><head>...
Run Code Online (Sandbox Code Playgroud)

html html5

5
推荐指数
1
解决办法
448
查看次数