在ScalaJS中导出伴随对象方法?

时间:2016-04-22 05:38:43

标签: scala scala.js

使用ScalaJS时,我可以导出一个对象和所有成员,如此

@JSExport object Thing {
    @JSExport def doThing(x:Int) = x * 2
}

但是,在创建伴随对象时,ScalaJS似乎不再导出方法。

@JSExport @JSExportAll case class Thing(x:Int)

@JSExport object Thing {
   @JSExport def fromNumber(x:Int) = Thing(x)
}

在这个例子中,我现在有了Javascript类,我可以通过调用Thing(n)来实例化,但似乎没有任何方法Thing.fromNumber可用。

ScalaJS可以实现吗?

(注:目前使用“ScalaJS 0.6.8”和“Scala 2.11.8”和“SBT 0.13.9”

2 个答案:

答案 0 :(得分:0)

这样称呼:

import React from 'react';
import {render} from 'react-dom';
import { Provider } from 'react-redux';
import { Router, browserHistory } from 'react-router';
import routes from './routes';
import configureStore from './store/configureStore';
require('./favicon.ico'); // Tell webpack to load favicon.ico
import './styles/styles.scss'; // Yep, that's right. You can import SASS/CSS files too! Webpack will run the associated loader and plug this into the page.

const store = configureStore();

render(
  <Provider store={store}>
    <Router history={browserHistory} routes={routes} />
  </Provider>, document.getElementById('app')
);

(注意&#39; Thing&#39;)背后的额外括号

答案 1 :(得分:0)

导出时,您必须为伴随对象指定另一个名称:

@JSExport @JSExportAll case class Thing(x:Int)

@JSExport("ThingOps")
object Thing {
   @JSExport def fromNumber(x:Int) = Thing(x)
}

现在致电ThingOps().fromNumber(1)

您要求的是静态方法。 Scala.js目前不支持这些(参见#1902)。