Я хочу использовать material.js в одном из моих проектов kotlin / JS. Для этого я использую оболочку с внешними ссылками на классы material.js. Тестовый файл для воспроизведения ошибки находится здесь:
package engineEmi
import org.w3c.dom.CanvasRenderingContext2D
import org.w3c.dom.HTMLElement
import kotlin.browser.document
import kotlin.browser.window
external object Matter {
val engine : Engine
val render : Render
val world : World
val bodies : Bodies
}
external class Engine{
fun create() : Engine
fun run(engine : Engine)
val world : World
}
external class Render{
fun create(body: HTMLElement?, y : Engine) : Render
fun run(render : Render)
}
external class Bodies{
fun rectangle(posX : Int, posY : Int, width: Int, height: Int) : Body
}
external class Body{
}
external class World{
fun add(world: World, elements : Array<Body>)
}
object EngineEmi{
fun main() {
var World = Matter.world
var Bodies = Matter.bodies
var engine = Matter.engine.create()
var render = Matter.render.create(document.body, engine)
var boxA = Bodies.rectangle(400, 200, 80, 80);
var boxB = Bodies.rectangle(450, 50, 80, 80);
World.add(engine.world, arrayOf(boxA, boxB))
Matter.engine.run(engine)
Matter.render.run(render)
}
}
Он хорошо компилируется, но выдает в браузере следующую ошибку:
Uncaught TypeError: Невозможно прочитать свойство 'create' изне определено в EngineEmi.main (engineEmi.js: 449) в main (engineEmi.js: 28) в engineEmi.js: 505 в engineEmi.js: 508 EngineEmi.main @ engineEmi.js: 449 main @ engineEmi.js: 28 (анонимный) @ engineEmi.js: 505 (анонимный) @ engineEmi.js: 508
Но я считаю, что engine
четко определен и должен быть связан с внешним классом JS.
Может ли кто-нибудь помочь здесь?
РЕДАКТИРОВАТЬ:
Для справочных целей: Это реализация JS Engine с методом .create (): ССЫЛКА НА GITHUB