gwt-2.8.2下载_从GWT开发人员的角度概述Scala.js
gwt-2.8.2下載
該博客嚴(yán)重偏向于GWT(和基于GWT的框架),但是我謹(jǐn)記,將來GWT可能會被其他技術(shù)取代,因此我們始終愿意探索其他平臺/框架。 正如他們所說,多元化可以降低風(fēng)險(xiǎn)。 每種編程語言,即使是最奇怪的編程語言,都有其“到j(luò)avascript”編譯器: https : //github.com/jashkenas/coffeescript/wiki/List-of-languages-that-c??ompile-to-JS ,因此GWT可以嘗試學(xué)習(xí)向他人學(xué)習(xí),以求日后改善。 Scala.js一直被與GWT進(jìn)行比較,因?yàn)樗鼈兌际褂没贘VM的語言,這暗示著語法和語義上的某些相似之處。 Scala.js是Scala到j(luò)avascript編譯器,其工作方式與GWT類似。 Scala.js具有使GWT有吸引力的功能的等效項(xiàng),例如JsInterop,開發(fā)人員模式,修剪,草稿編譯,元素等。 我們計(jì)劃在即將發(fā)布的一篇文章中與GWT進(jìn)行Scala.js比較,但是在此之前,我們想簡要介紹一下Scala.js,以及如何編寫一個(gè)簡單的程序。
這是Scala,不是Java
Scala是一種面向?qū)ο蟮腏VM語言,它針對功能性編程及其內(nèi)置的不變性已經(jīng)引起了一些炒作。 就我個(gè)人而言,我從未在Scala中編寫任何“實(shí)際”應(yīng)用程序,因此我真的不了解該語言的所有來龍去脈。 看起來您可以使用Scala進(jìn)行任何操作,也可以使用Java 8進(jìn)行操作,反之亦然。 在檢查語法差異時(shí)引起注意的一件事是,Scala具有動態(tài)類型推斷,因此未聲明變量的類型。 這看起來可能更類似于javascript,并且可能會給人一種我們直接使用javascript進(jìn)行編程的感覺。 Scala.js文檔提供了Scala與Es6之間的比較: https ://www.scala-js.org/doc/sjs-for-js/es6-to-scala-part1.html
項(xiàng)目設(shè)置
初始設(shè)置非常簡單。 只有一個(gè)用于scala( sbt )的構(gòu)建工具,和一個(gè)用于Scala.js的插件,因此沒有任何問題。 Scala.js項(xiàng)目不需要任何特殊結(jié)構(gòu),簡單的項(xiàng)目結(jié)構(gòu)就足夠了。 NodeJs是使用Scala.js的要求。 然后,可以通過運(yùn)行以下命令來初始化項(xiàng)目:
sbt new scala/scala-seed.g8從命令行。 然后將提示您輸入項(xiàng)目的名稱,版本和組織名稱(在Maven中等效于groupId)。 然后,我們需要將Scala.js依賴關(guān)系和配置添加到build.sbt文件(等同于pom.xml)中。 我們的build.sbt文件看起來像:
enablePlugins(ScalaJSPlugin)name := "scalajsdemo"version := "0.1-SNAPSHOT"scalaVersion := "2.11.8"libraryDependencies ++= Seq("org.scala-js" %%% "scalajs-dom" % "0.9.1" )scalaJSUseMainModuleInitializer := true該配置是最小的,因此不需要很大的努力。
使用框架
設(shè)置項(xiàng)目后,我們要做的就是創(chuàng)建一個(gè)擴(kuò)展JSApp對象的入口點(diǎn)類。
object MyForm extends JSApp {override def main(): Unit = {} }Scala.js具有非常全面的API,以與原始JS相同的方式進(jìn)行DOM交互和操作。 實(shí)際上,這是Scala.js的核心重點(diǎn):默認(rèn)情況下,沒有自定義ui組件來構(gòu)建ui。 例如,使用事件偵聽器創(chuàng)建按鈕的代碼如下: val button = document.createElement("button")button.textContent = "Click button"button.addEventListener("click", { (e0: dom.Event) =>println("clicked")}, false)document.body.appendChild(button)
為了使用XmlHttpRequest執(zhí)行HTTP請求,代碼如下所示:
val req = new XMLHttpRequest()req.open("GET", "http://www.g-widgets.com/feed/")req.setRequestHeader("Access-Control-Allow-Origin", "*")假設(shè)我們要解析G-Widgets Rss feed并創(chuàng)建一個(gè)包含所有標(biāo)題的列表,然后我們將執(zhí)行以下操作:
val blogPostsListElement = document.createElement("ul")req.onload = {(e: Event) =>if (req.status == 200) {val parser = new DOMParser();val doc = parser.parseFromString(req.responseText, "application/xml")val titleList = doc.getElementsByTagName("title")for(i <- 0 to titleList.length){val listElement = document.createElement("li")if(titleList.item(i) != null){listElement.textContent = titleList.item(i).textContentblogPostsListElement.appendChild(listElement)}}}}req.send();document.body.appendChild(blogPostsListElement)Scala.js還可以使用注釋將類導(dǎo)出/導(dǎo)入到Javascript。 假設(shè)我們要在代碼中使用JSON實(shí)用程序?qū)ο?#xff0c;導(dǎo)入它的一種方法是: @js.native @JSGlobal object JSON extends js.Object {def parse(data: String): js.Object = js.nativedef stringify(anobject :js.Object): String = js.native }
同樣,我們可以使用注釋從JavaScript腳本中導(dǎo)出一些要使用的對象:
@JSExportTopLevel("DummyJs") class DummyJs(val dummyValue: String) {@JSExportdef getTheDummyValue(): String = dummyValue }編譯和開發(fā)模式
關(guān)于Scala.js的一件真正整潔的事情是它的編譯時(shí)間短。 更改代碼后,重新編譯.js所需的編譯時(shí)間不會超過9(對于此簡單應(yīng)用程序),這非常令人鼓舞,而且令人沮喪。 Web服務(wù)器的選擇(如果需要)保持打開狀態(tài)。 例如,帶有實(shí)時(shí)重載擴(kuò)展名的服務(wù)器可能會派上用場。 Scala.js提供了兩種編譯模式:fastOptJS和fullOptJS。 當(dāng)運(yùn)行fastOptJS(相當(dāng)于GWT中的草稿模式)時(shí),編譯器進(jìn)行的優(yōu)化較少,因此編譯時(shí)間較短。 這是發(fā)展的理想選擇。 另一方面,fullOptJS使用Google的閉包編譯器來生成高度緊湊和優(yōu)化的.js文件。
結(jié)語
這是對Scala.js的自以為是的介紹。 Scala.js可以提供的主要優(yōu)點(diǎn)是沒有樣板的項(xiàng)目設(shè)置和快速的編譯時(shí)間。 GWT比Scala.js更成熟并且使用更多,但是GWT可以從Scala.js中學(xué)習(xí),可以減少編譯時(shí)間和設(shè)置項(xiàng)目的樣板。 另一方面,一些Scala.js倡導(dǎo)者并不了解GWT的演變,有時(shí)會對GWT能力進(jìn)行不正確的評估。 例如, 格雷格·多雷爾 ( Greg Dorell)在最近的Devoxx 演講中指出,“ GWT不起作用”,因?yàn)樗鼰o法為js功能提供良好的導(dǎo)入/導(dǎo)出。 他顯然忽略了GWT還引入了JsInterop。 GWT仍然在生態(tài)系統(tǒng)和社區(qū)方面取勝。 我們將在以后的帖子中進(jìn)行更詳細(xì)的比較。 綜上所述,Scala.Js是開發(fā)Web應(yīng)用程序的一種有吸引力的替代方法。 對于Java開發(fā)人員來說,可能存在語言障礙,但是學(xué)習(xí)曲線不會真的很陡峭,因?yàn)镴ava和Scala都是JVM語言并且具有相似的概念。
完整的代碼可以在這里找到: https : //github.com/zak905/scalajsdemo
翻譯自: https://www.javacodegeeks.com/2017/07/overview-scala-js-gwt-developer-perspective.html
gwt-2.8.2下載
總結(jié)
以上是生活随笔為你收集整理的gwt-2.8.2下载_从GWT开发人员的角度概述Scala.js的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: d800e和d810(d800e和d81
 - 下一篇: 双屏电脑壁纸下载(双屏显示壁纸)