我想编写可以转换为EmberJS代码的Scala代码。
可以吗?如果没有开箱即用的任何关于如何通过黑客攻击ScalaJS来实现的建议?
问候。
答案 0 :(得分:5)
Scala.js可以发出任何类型的JavaScript代码,因此从技术上讲,答案是肯定的。但是,由于Ember要求您使用各种类型的自定义类来定义“组件”,因此在Scala.js中编写它可能有点难看。例如,此示例取自首页:
App.GravatarImageComponent = Ember.Component.extend({
size: 200,
email: '',
gravatarUrl: function() {
var email = this.get('email'),
size = this.get('size');
return 'http://www.gravatar.com/avatar/' + hex_md5(email) + '?s=' + size;
}.property('email', 'size')
});
必须用Scala.js编写为:
import scala.scalajs.js
import js.Dynamic.{global => g, literal => lit}
g.App.GravatarImageComponent = g.Ember.Component.extend(lit(
size = 200,
email = "",
gravatarUrl = ({ (ths: js.Dynamic) =>
val email = ths.get("email")
val size = ths.get("size")
s"http://www.gravatar.com/avatar/${g.hex_md5(email)}?s=$size"
}: js.ThisFunction).asInstanceOf[js.Dynamic].property("email", "size")
))
好吧...... JavaScript-ish。
强大的JavaScript用户界面库非常依赖于JavaScript的动态和怪异方面,它们在Scala.js中不太适合。我打算在本学期编写一个专门为Scala.js设计的类似React.js的UI库来解决这个问题。