[英]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.