흠. 비동기 플래그는 사용되지 않는 것으로부터 오래되었습니다. 나는 그것이 더 이상 사용 가능하다는 것을 깨닫지 못했다. 그러나 이것을 읽은 것으로 여기에 대략적으로 포함되어 있습니다. (분명히 테스트되지 않았으므로 필요에 따라 상황에 맞게 조정하십시오.)
내 설명에 따르면 실제로 결과는 배열을 인코딩하는 JSON 문자열입니다. 케이스되는 것이 첫 번째 단계가 파싱하는 것이다
JSON 문자열을 파싱하고에게 JS 객체의 "원시"형태 인
js.Dynamic
를 제공
val rawArray:js.Dynamic = JSON.parse(res)
. 이 시점에서 Scala.js는 구조에 대해 아무것도 모릅니다. 이것은 당신이 자바 스크립트 유형에 대해 Scala.js을 지시하는 방법이다
@js.native
trait MyStruct extends js.Object {
val name:String = js.native
}
:
다음, 당신은 같은 배열의 각 요소의 구조가 어떻게 생겼는지 Scala.js을 기술해야한다. 이 유형에는 "name"이라는 속성 (String)이 있음을 알 수 있습니다. 원할 경우 유형의 다른 필드를 추가 할 수도 있고하지 않을 수도 있습니다. 이는 사용자가 name
만 신경 쓰는 것처럼 들리므로 나머지는 나열 할 필요가 없습니다.
그런 다음, 당신은 당신의 rawArray
정말 무엇 Scala.js 알려주기 :
val myArray = rawArray.asInstanceOf[js.Array[MyStruct]]
asInstanceOf
하지 변화 아무것도하지 - 그냥 Scala.js에 선언되어, "나는이 JS 것을 알고있다. Dynamic은 실제로 MyStruct의 배열입니다. " 그래서 지금 당신은 js.Array[MyStruct]
입니다 myArray
을 가지고, 당신은 정상적으로 map
를 사용할 수 있습니다
val myNames = myArray.map(_.name)
당신이 Scala.js 원시 자바 스크립트의 경계에서 작동 할 때 물건을 이런 종류의 매우 정상입니다. JS 레벨은 완전히 타입이 지정되지 않았고 SJS 레벨은 강하게 입력되었으므로 JS 레벨에서 나오는 실제 유형이 무엇인지 SJS를 "가르쳐야"합니다. 그런 다음 SJS 코드의 나머지 부분에서 이러한 유형을 가정 할 수 있습니다.
감사합니다. 나는 지금 바빠 지지만 앞으로 며칠 이내에 그것에 대해 살펴볼 것입니다. – ceran
완벽하게 작동합니다. 감사합니다. – ceran