小编Mar*_*arc的帖子

创建和发送自定义Javascript事件是否被视为一种好习惯?

我的Web应用程序使用document.createEventevent.initEvent创建泛型类型的自定义事件Event.

我想知道这是否被视为良好做法.在这方面,我可以利用已经存在的DOM事件系统,而不必发明和实现我自己的; 另一方面,这可能导致名称冲突,以防未来的标准化事件模型定义具有我选择的名称的事件类型.(或者是否可以命名事件类型?)

我问,因为我刚刚通过浏览stackoverflow了解到将自定义属性放在DOM对象或内置Javascript对象上被认为是不好的做法.

编辑 我想我已经找到了: http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html#events-CustomEvent

所以让我重新解释一下我的问题:我是否正确理解了引用的部分,因为建议CustomEvent在Web应用程序中实际使用它?

添加警告 我刚刚注意到CustomEvent6.之前的Firefox版本不支持它.但是当前基于Webkit的浏览器支持它.

javascript browser events dom

7
推荐指数
1
解决办法
302
查看次数

GWT:UiBinder中的菜单

我想在GWT 2.0中通过UiBinder使用声明方法实现菜单(MenuBar,MenuItem).

我遇到了两个问题:

  1. 有没有办法在.ui.xml文件中添加MenuItemSeparators?到目前为止,我只设法将MenuBar-和MenuItem-tags放入文件中.

  2. 使用@UiHandler,GWT为我编写事件处理程序的样板代码.对于菜单,我需要编写命令.我怎么能用UiBinder方法做到这一点?是否有一个命令标记放在.ui.xml文件中?我是否必须自己编写命令处理程序的样板代码?

感谢您思考这些问题!

gwt uibinder

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

init()和window.init()之间有什么区别?

我已经阅读了以下配方,其中显示了使用Google Cloud Endpoints后端为AngularJS前端提供支持的方法:

https://cloud.google.com/resources/articles/angularjs-cloud-endpoints-recipe-for-building-modern-web-applications

我不明白的是AngularJS和Cloud Endpoints初始化的附录.相关部分如下:

附录:关于AngularJS + Cloud端点初始化的提示提示#1:注意初始化序列

留言簿应用程序按以下顺序加载三个不同的JS库:

  • AngularJS
  • 留言簿应用程序
  • Google API客户端,包含端点功能

为了遵循这个顺序,index.html在<script>标记中包含以下 标记,<head>用于加载每个JS库:

<script src="js/angular.min.js"></script>  
<script src="js/guestbook.js"></script>  
<script src="https://apis.google.com/js/client.js?onload=init"></script>
Run Code Online (Sandbox Code Playgroud)

加载后,第三个库(Google API客户端)调用其"onload"参数指定的初始化函数.在这种情况下,期望并调用init()函数.提示#2:尽快进入AngularJS世界

在初始化序列中,我们使用两个函数:

init() function
window.init() function
Run Code Online (Sandbox Code Playgroud)

这个init()函数在guestbook.js中以下列方式定义:

function init() {   window.init(); }
Run Code Online (Sandbox Code Playgroud)

正如您可以看到上面的代码,该函数只调用window.init()函数(即在全局窗口对象中定义的init()函数)而不执行任何其他操作.window.init()在AngularJS控制器中定义如下:

$window.init= function() {   
   $scope.$apply($scope.load_guestbook_lib);
};
Run Code Online (Sandbox Code Playgroud)

在AngularJS中,全局窗口对象由"$ window"表示法访问,该表示法是它的包装器.AngularJS中的最佳实践是不直接访问窗口对象以提高可测试性.

您不希望在第一个init()方法中执行初始化的原因是您可以在AngularJS世界中放置尽可能多的代码,例如控制器,服务和指令.因此,您可以利用AngularJS的全部功能并进行所有单元测试,集成测试等.

似乎init()在外部javascript文件中定义了一个全局函数.这个init()函数只是调用window.init()(并且应该在加载后由Google客户端库调用).但是window.init()不是全局定义的init()函数吗?所以我们不会在这里得到一个循环,直到window.init()(并因此init())被重新定义?

javascript angularjs google-cloud-endpoints

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

有没有办法在Python 2.5中模拟Python 3-metaclass的__prepare__特殊方法?

在我的项目中,我必须坚持使用Python 2.5(Google App Engine).在应用程序的某个地方(实际上是一个框架),我必须跟踪定义了哪些变量以及定义它们的顺序,换句话说,无论何时处理赋值运算符,我都要拦截.

使用Python 3,我将使用一种__prepare__方法定义元类M,该方法返回一个智能字典,用于跟踪何时访问它.然后我只需要使用元类M执行类语句中的所有内容.

有没有办法在Python 2.5中模拟这个?

我希望实现的目标的例子

使用Python 3的元类方法,我可以实现像引用一样工作的变量,例如M可以这样

# y is a callable
class C(metaclass=M):
    x = ref(y)
    x = 1
Run Code Online (Sandbox Code Playgroud)

将等效(直到创建C)y(1),即通过黑盒ref函数对C字典中的变量的第一次赋值创建此变量.进一步的赋值只需调用ref函数的参数.

python metaclass python-3.x

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

C优化:为什么编译器将对象视为常量?

编译以下C模块

static const int i = 1;

void f (const int *i);

int g (void)
{
  f (&i);
  return i;
}
Run Code Online (Sandbox Code Playgroud)

gcc -S -O3在x86_64机器上使用会为函数生成以下程序集g:

g:
        leaq    i(%rip), %rdi
        subq    $8, %rsp
        call    f@PLT
        movl    $1, %eax           # inlined constant as an immediate
        addq    $8, %rsp
        ret
Run Code Online (Sandbox Code Playgroud)

换句话说,return语句被编译为将常量移动$1到返回寄存器中%eax,这是有道理的,因为它i被声明为常量.


但是,如果我删除它,const那么我有

static int i = 1;

void f (const int *i);

int g (void)
{
  f (&i);
  return i;
} …
Run Code Online (Sandbox Code Playgroud)

c assembly gcc compiler-optimization

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

Appel 和 Shao 的“高效且安全的空间闭合转换”的实际应用和最新进展

将函数式程序编译为机器语言时,编译器必须选择如何实现闭包。在以下示例(方案语法)中,该函数f返回(lambda (y) (+ x y))其机器表示(其闭包)必须包含一个代码指针和一个值的过程x

(lambda (f x)
  (lambda (y) (+ x y))
Run Code Online (Sandbox Code Playgroud)

闭包转换是为这种机器表示选择布局的过程。两种典型的策略是链表或平面闭包。虽然平面闭包可能涉及额外的值复制,但朴素链表通常对空间不安全(变量在最后一次使用后保持活动状态)。

Keep、Hearn 和 Dybvig 在他们的论文Optimizing Closures in O(0) time 中描述了一种优化平坦闭包策略的算法。当编译策略是基于堆栈的时,该算法给出了很好的结果。对于在堆上分配激活记录的基于 CPS 的编译器(请参阅Appel 的持续编译),Keep 等人的算法。似乎没有给出最佳结果。

另一方面,Appel 和 Shao 在他们的论文Efficient and Safe-for-Space Closure Conversion 中提出了一种非常复杂的闭包转换算法,其中闭包被实现为平面闭包和纯链表之间的某种东西,这是安全的空间和它适用于使用 CPS 并显式传递延续的编译器。本文中的例子表明,该算法给出了非常好的结果。

鉴于 Appel 和 Shao 的论文已有大约 20 年的历史,我想知道在 CPS 中为函数式语言执行闭包转换时它是否仍然是最先进的。

在他们的论文中,他们提到该算法已在 SML/NJ (1.03z) 版本中成功实现;不过,我还没有成功地在当前版本的 SML/NJ 中找到该算法的实现。

该算法是否或是否在实际编译器中使用?或者是否有改进或其他已知的闭包转换算法,当在堆上分配活动记录时,它们既安全又高效(这又允许 O(1) 实现call/cc)?这些算法是否曾经实施过,或者它们的原因是否与它们的效率背道而驰?

为了允许对各种策略进行实验,如果答案包括(引用)(开源)算法的实现,或者至少包括现有的编译器,那就太好了。这也可能暗示这些算法如何在实践中证明。

compiler-construction closures functional-programming sml smlnj

5
推荐指数
0
解决办法
135
查看次数

RESTful URL 中的输出格式如何编码?

假设我有一个 RESTful Web 服务,它保存有关可以通过http://example.com/myobject之类的 url 访问的对象的信息。我希望能够以两种格式检索此信息:首先是 XML 格式的纯数据,其次是完整的 HTML 页面,其中还可能包括一个 javascript 接口来更改对象并使用 AJAX 将其放回。

实现这一目标的规范方法是什么?我应该在两个不同的网址(例如http://example.com/myobject?format=xml和 ...format=html )发布我的对象吗?(是否有比使用查询字符串更好的方法来区分此处的 URL?)或者发送诸如多部分 MIME 数据之类的内容是否明智?我可以依赖浏览器能够提取 HTML 部分吗?或者请求中是否有一些我可以使用的 HTTP 标头字段?

(使用不同格式发送的 PUT 或 POST 请求会更容易,因为服务器可以检查格式并相应地解析它。)

html rest url http

4
推荐指数
1
解决办法
4351
查看次数

C ++ 20范围的切片视图

Python的itertoolsislice(seq, start, stop, step),需要一个序列,并返回每个的一个迭代过程step之间的序列值的个值startstop

C ++ 20的Ranges库是否提供类似的功能,例如slice,采用随机访问迭代器start,sentinel stop和step值的函数step,并返回对和step之间的每个th值进行迭代的随机访问迭代器?startstop

如果没有,可以使用Ranges库提供的原语来实现这种迭代器适配器。

(我知道如何手动实现这样的适配器,所以这不是问题。)

c++ stl c++20

4
推荐指数
2
解决办法
110
查看次数

如何使用GWT 2.1的RequestFactory处理安全性约束?

我目前正在开发一个将部署在Google App Engine上的GWT 2.1应用程序.我想用新的RequestFactory实现服务器通信.

现在我的问题是如何在这种情况下处理细粒度的安全问题?某些服务器操作(在RequestContext存根中声明的操作)应限制为某些用户(可能取决于远程调用的参数).如果呼叫未经授权,我希望客户端显示登录页面(例如,可以以不同的用户身份登录).

从Expenses示例中,我知道如何实现自动重定向到登录页面,但在此示例中,安全模型非常简单:当且仅当用户登录时,才允许客户端访问servlet.

我应该在服务器端服务中引发自定义UnAuthorizedException吗?我应该在哪里拦截此例外?(我可以在servlet过滤器中执行此操作,例如Expenses示例的GaeAuthFilter吗?)

security authentication gwt google-app-engine servlets

3
推荐指数
1
解决办法
1592
查看次数

R7RS计划的反思能力

关于编程语言Scheme的R7RS报告描述了在Scheme系统中运行Scheme代码的两种方法:

1)方案系统可以运行报告中第5.1节所述的程序.

2)方案系统可以提供read-eval-print-loop,其中交互式地解释Scheme代码.

我的问题是如何在Scheme系统中反映这两种运行Scheme代码的方式,以及R7RS报告中包含的内容.

有一个eval库过程eval,它在一个正在运行的Scheme系统中执行Scheme代码,所以eval看起来就像我在搜索的内容.

但是,我可以插入的唯一保证可变环境evalinteraction-environmentrepl库过程返回的环境.但是,有了这个,我无法可靠地模拟上面的REPL(第2点),因为REPL允许导入表单,而eval程序不需要.

此外,eval由于其他原因,我无法使用交互环境来完整的Scheme程序:它通常不为空,特别是它包含所有绑定(scheme base).

为了实现1)在运行的Scheme系统中,eval库过程environment看起来很有前途,因为它允许事先导入库(这是运行程序的一部分).但是,环境是不可变的,所以我无法评估define环境中的s.一种方法是将程序体包装在一个lambda表单中,以便define定义局部变量.但是,这也行不通:在一个lambda表单中,所有定义都必须出现在body的开头(对于Scheme程序的顶层不是这样),并且在lambda表单库中,绑定可以被词法覆盖,顶级绑定无法实现.

由于Scheme是Turing-complete,我当然可以在正在运行的Scheme系统中模拟Scheme系统,但我想知道是否可以通过使用该eval过程.我感兴趣的一个原因是eval可能会优化(例如通过JIT编译器后端),因此使用此过程可能会提供接近本机的速度(与手动编写简单的解释器相比).

reflection scheme eval read-eval-print-loop r7rs

3
推荐指数
1
解决办法
579
查看次数

Doctests:如何抑制/忽略输出?

以下(废话)Python模块的doctest失败:

"""
>>> L = []
>>> if True:
...    append_to(L) # XXX
>>> L
[1]
"""

def append_to(L):
    L.append(1)
    class A(object):
        pass
    return A()

import doctest; doctest.testmod()
Run Code Online (Sandbox Code Playgroud)

这是因为标记为XXX的行之后的输出为<__main__.A object at ...>(由返回append_to)。当然,我可以将输出直接放在标记为XXX的行之后,但是在我的情况下,这会使读者分心于应实际测试的内容,即该功能的副作用append_to。因此,如何抑制该输出或如何忽略它。我尝试了:

"""
>>> L = []
>>> if True:
...    append_to(L) # doctest: +ELLIPSIS
    ...
>>> L
[1]
"""

def append_to(L):
    L.append(1)
    class A(object):
        pass
    return A()

import doctest; doctest.testmod()
Run Code Online (Sandbox Code Playgroud)

但是,这会产生一个ValueError: line 4 of the docstring for __main__ has inconsistent leading whitespace: …

python doctest

2
推荐指数
1
解决办法
2826
查看次数

什么时候可以覆盖(R7RS)方案中的顶级绑定?

我已经阅读了即将发布的R7RS方案标准(小语言)的当前草案,但我不明白在什么条件下重新定义顶级绑定不是错误。

我想可以定义设置!第二次在程序顶层引入的绑定。但是从外部库导入的绑定又如何呢?是否可以通过标准覆盖这些绑定?

报告第 26/27 页写道:

程序的顶层还可能包括导入声明。在库声明中,使用不同的绑定多次导入相同的标识符,或者使用 Define、define-syntax 或 set! 重新定义或改变导入的绑定都是错误的。然而,REPL 应该允许这些操作。

这是否意味着重新定义仅在导入绑定的库中发生时才是错误?

据我所知,如果编译器不知道“ +”是否仍然意味着内置加法或任何其他用户指定的错误,它会禁止编译器进行优化。但从这个角度来看,在库级别限制禁止重新绑定是没有意义的,因为它对于程序中的导入绑定也有意义(至少)。

PS:因为这都是关于一个计划程序的环境:我说环境不是一等公民,因为你无法掌握当前的环境,我这样说对吗?(这反过来又允许编译的程序忘记所选择的绑定名称。)

scheme r7rs

2
推荐指数
1
解决办法
455
查看次数

<button>上的"display:flex"与<span>上的"display:flex"

我有关于计算柔性容器宽度的问题.在这方面,该元素似乎与其他元素的行为不同.

如果我将样式添加"display: flex"<span>包含文本的元素,则它占用其父元素宽度的100%.

如果我向<button>元素添加相同的样式,则根据其文本内容计算其宽度.

这是怎么回事?<button>元素上的哪个(隐式)CSS规则会产生这种行为?我怎样才能在两种行为之间切换?

(我已经在Firefox和Chrome中对此进行了测试.我也可以使用<div>而不是<span>.)

html css css3 flexbox

2
推荐指数
1
解决办法
1133
查看次数