Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ScalaJS to emit EmberJS code?

Tags:

scala.js

I want to write Scala code that can be then translated to EmberJS code.

Can it be done? If not out of the box any suggestion as to how that can be achieved by hacking ScalaJS?

Regards.

like image 384
user3336828 Avatar asked Feb 21 '14 10:02

user3336828


1 Answers

Scala.js can emit any kind of JavaScript code, so technically the answer is yes. However, since Ember requires you to define "components" using classes of sorts of its own design, it can be a bit ugly to write in Scala.js. For example, this example taken from the front page:

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')
});

would have to be written in Scala.js as:

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")
))

which is, well ... JavaScript-ish.

Powerful UI libraries for JavaScript kind of rely so much on the dynamic and weird aspects of JavaScript that they don't fit super well in Scala.js. I am planning to write a React.js-like UI library specifically designed for Scala.js this semester to address this issue.

like image 176
sjrd Avatar answered Oct 13 '22 13:10

sjrd