आप मामले वर्ग को नियंत्रित करते हैं, तो आप सिर्फ @JSExportAll
एनोटेशन इसे करने के लिए जोड़ सकते हैं:
@JSExportAll
case class Name(first: String, last: String)
यह first
और last
नामित गुण पैदा करेगा। ध्यान दें कि यह एक साधारण वस्तु के समान नहीं है। हालांकि, क्या add
विधि करता है पर निर्भर करता है, यह पर्याप्त (और JSON को बदलने और फिर से पार्स करने की तुलना में अधिक हल्के) है।
मामले आप मामले वर्ग संकलन पार करने की जरूरत है, तो आप अपने JVM परियोजना में scalajs-stubs
पुस्तकालय शामिल कर सकते हैं। यह डमी एनोटेशन प्रदान करेगा (जो .class
फाइलों पर नहीं लिखे गए हैं)।
@js.native
trait Options extends js.Object {
def first: String = js.native
def last: String = js.native
}
val x = Name("foo", "bar")
js.use(x).as[Options]
js.use(x).as
कॉल विफल हो जाएगा:
val x = Name("foo", "bar")
js.use(x).as[js.Object]
यह भी एक ऐसी विशेषता है जो खेतों आप की जरूरत को परिभाषित करता है के साथ काम करेंगे:
आप एक js.Object
की जरूरत है, तो आप निर्यात typechecker उपयोग कर सकते हैं , अगर वहाँ प्रकार के बीच एक बेमेल है (यानी अगर Options
एक क्षेत्र है कि Name
परिभाषित नहीं करता है परिभाषित करता है)।
बेतकल्लुफ़, मुझे लगता है यह है कि upickle.write सबसे * सुविधाजनक * जिस तरह से यह से निपटने के लिए। आप शायद कुछ हद तक एक अधिक सुरुचिपूर्ण समाधान निराकार का उपयोग कर प्राप्त कर सकते हैं, लेकिन यह बहुत स्पष्ट लाभ के बिना बहुत अधिक प्रयास होगा ... –
कहा करने के बाद कि कैसे एक एक js.Object को एक json स्ट्रिंग परिवर्तित करता है? – user79074
ने इसे स्वयं नहीं किया है, लेकिन मुझे संदेह है कि js.eval (स्ट्रिंग) चाल करेगा। –