Hmm。非同期フラグは非難されて以来長いことに注意してください。私はそれがもはや利用可能であったことに気付かなかった。しかし、これを読んだとして、ここには大雑把に関係するものがあります。
私の印象は、実際には配列をエンコードしているJSON文字列であるという印象です。ケースということを、最初のステップは、それを解析することです:
JSON文字列を解析し、あなたのJSオブジェクトの「生」の形式で
js.Dynamic
を与える
val rawArray:js.Dynamic = JSON.parse(res)
。この時点で、Scala.jsはその構造について何も知らない。
@js.native
trait MyStruct extends js.Object {
val name:String = js.native
}
これは、あなたがJavaScriptのタイプについてScala.jsに指示する方法である:
次に、あなたはあなたの配列の各要素の構造がどのようなものかScala.jsすることを説明すべきです。この型には "name"という名前のプロパティがあります。これはString型です。あなたは好きなようにタイプの他のフィールドを追加することができます - あなたはname
を気にしているように聞こえるので、残りをリストする必要はありません。 - それはちょうど私は、これはJSことを知っている」、Scala.jsに宣言されて
val myArray = rawArray.asInstanceOf[js.Array[MyStruct]]
asInstanceOf
はない変更何もしない:
その後、あなたはあなたのrawArray
が本当に何であるかScala.jsを教えてください。 Dynamicは実際はMyStructの配列です。だから今は、js.Array[MyStruct]
あるmyArray
を、持っていて、通常通りmap
を使用することができます。
val myNames = myArray.map(_.name)
あなたはScala.jsと生のJavaScriptの境界で動作しているときのもののこの種はかなり正常です。 JSレベルは完全に型なしであり、SJSレベルは厳密に型指定されているので、JSレベルから出て来る実際の型が何であるかをSJSに教えなければなりません。それでは、SJSコードの残りの部分でそれらの型を仮定することができます...
ありがとう、それは有望そうです。私は現時点では忙しいですが、今後数日以内にそれを調べます。 – ceran
完璧に動作します、ありがとう – ceran