ScalaJS发出EmberJS代码?

时间:2014-02-21 10:49:42

标签: scala.js

我想编写可以转换为EmberJS代码的Scala代码。

可以吗?如果没有开箱即用的任何关于如何通过黑客攻击ScalaJS来实现的建议?

问候。

1 个答案:

答案 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库来解决这个问题。