繁体   English   中英

使用Amber将选项传递给JS函数

[英]Passing options to JS function with Amber

我正在尝试写相当于:

$( "#draggable" ).draggable({ axis: "y" });

在Amber smalltalk。

我的猜测是: '#draggable' asJQuery draggable: {'axis' -> 'y'}但不是这样。

不适用于vanilla 0.9.1,但至少在最近两个月前在master上工作的是:

'#draggable' asJQuery draggable: #{'axis' -> 'y'}

并且这是推荐的方式。

PS: #{ 'key' -> val. 'key2' -> val } #{ 'key' -> val. 'key2' -> val }是内联创建HashedCollection的语法,它实现了(从前面提到的两个月前的修复),因此只有公共(也称为可枚举)属性是HashedCollection键。 在修复之前,所有方法都是可枚举的,这阻止了自然地使用它来代替JavaScript对象。

赫尔比的优秀答案指出了推荐的方法。 显然,现在有词典 - 文字支持(见下面的评论)。 不知道:-)

做旧的/替代方式

由于历史原因,或者对于未使用最新主版本的用户,这是另一种方法:

options :=  <{}>. 
options at: #axis put: 'y'.
'#draggable' asJQuery draggable: options.

第一行构造一个空的JavaScript对象(它实际上是一个JSObjectProxy )。

第二行将字符串“y”放入槽“轴”中。 它具有与以下相同的效果:

options.axis = "y"; // JavaScript

最后,它被调用,并作为参数传递。

数组文字与字典

你正在做的事情没有用,因为在现代的Smalltalk(Pharo / Squeak / Amber)中,花括号用于数组文字,而不是像JavaScript中使用的对象文字。

如果您在工作区中评估(打印)它:

{ #elelemt1. #element2. #element3 }.

你得到:

a Array (#elelemt1 #element2 #element3)

因此,如果你有一些看起来像JavaScript对象的东西 - 实际上它是一个关联数组。 为了说明我给你这个片段,右边是print-it的结果:

arrayLookingLikeObject := { #key1 -> #value1. #key2 -> #value2. #key3 -> #value3}.

arrayLookingLikeObject class. "==> Array"
arrayLookingLikeObject first class. "==> Association"
arrayLookingLikeObject "==> a Array (a Association a Association a Association)" 

我在这里写到:

http://smalltalkreloaded.blogspot.co.at/2012/04/javascript-objects-back-and-forth.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM