簡體   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