5

私は以下に相当するものを書き込もうとしています:

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

琥珀色のsmalltalkで。

私の推測は:'#draggable' asJQuery draggable: {'axis' -> 'y'}しかしそれはそうではありません。

4

2 に答える 2

5

バニラ0.9.1で作業していませんが、少なくとも過去2か月前にマスターで作業しているのは次のとおりです。

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

そして、これが推奨される方法です。

PS:#{ 'key' -> val. 'key2' -> val }は、のインライン作成の構文でありHashedCollection、(前述の2か月前の修正から)実装されているため、パブリック(別名列挙可能)プロパティのみがHashedCollectionキーになります。修正前は、すべてのメソッドも列挙可能であったため、JavaScriptオブジェクトの代わりに自然に使用することはできませんでした。

于 2012-12-02T11:06:14.580 に答える
2

ハービーの優れた答えは、それを行うための推奨される方法を示しています。どうやら、辞書リテラルのサポートがあります(以下の彼のコメントを参照してください)。それを知りませんでした:-)

古い/別の方法

歴史的な理由から、または最新のマスターバージョンを使用していないユーザーの場合、これは別の方法です。

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

最初の行は空のJavaScriptオブジェクトを作成します(実際にはJSObjectProxy)。

2行目は、文字列「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 に答える