5

我正在尝试编写等效于:

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

在琥珀色的小谈话中。

我的猜测是:'#draggable' asJQuery draggable: {'axis' -> 'y'}但事实并非如此。

4

2 回答 2

5

没有在 vanilla 0.9.1 上工作,但至少在过去两个月前在 master 上工作是:

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

并且这是推荐的方式。

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

于 2012-12-02T11:06:14.580 回答
2

herby的出色回答指出了推荐的方法。显然,现在有字典文字支持(请参阅下面的评论)。不知道:-)

旧/替代方法

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

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

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

第二行将字符串“y”放在槽“axis”中。它与以下效果相同:

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

于 2012-12-02T10:54:00.843 回答