2015-05-11 1 views
5

Я хочу реализовать следующий код Dart:Ссылаясь на «этом» в Дарта JS Interop

var HelloWorldScene = cc.Scene.extend({ 
    onEnter:function() { 
     this._super(); 
    } 
}); 

Моя реализация Dart выглядит следующим образом:

class HelloWorldScene { 
    HelloWorldScene() { 
    var sceneCollectionJS = new JsObject.jsify({ "onEnter": _onEnter}); 

    context["HelloWorldScene"] = context["cc"]["Scene"].callMethod("extend", [sceneCollectionJS]); 
    } 

    void _onEnter() { 
    context["this"].callMethod("_super"); 
    } 
} 

К сожалению, я получаю следующую ошибку при работает код:

The null object does not have a method 'callMethod'

на следующей строке:

context["this"].callMethod("_super", []);

контекст ["this"] кажется нулевым, поэтому мой вопрос: как я могу ссылаться на эту переменную из Dart?

UPDATE 1: Полный пример кода можно найти на GitHub: https://github.com/uldall/DartCocos2dTest

+0

Я думаю, вы сделали опечатку: 'context [this] .callMethod (" _ super ");' (без кавычек). – GuyT

+0

Без кавычек «это» относится к экземпляру класса HelloWorldScene Dart. Я хочу вызвать _super() в переменной «this», находящейся в Javascript VM. – uldall

+0

Можете ли вы опубликовать полный пример. пожалуйста? – Robert

ответ

1

Вы можете захватить Js this с JsFunction.withThis(f). С этим определением дополнительный аргумент будет добавлен в качестве первого аргумента. Таким образом, ваш код должен быть:

import 'dart:js'; 

class HelloWorldScene { 
    HelloWorldScene() { 
    var sceneCollectionJS = 
     new JsObject.jsify({"onEnter": new JsFunction.withThis(_onEnter)}); 

    context["HelloWorldScene"] = 
     context["cc"]["Scene"].callMethod("extend", [sceneCollectionJS]); 
    } 

    void _onEnter(jsThis) { 
    jsThis.callMethod("_super"); 
    } 
} 
+0

Теперь я получаю следующую ошибку: 'NoSuchMethodError: метод не найден: '_super''. Кажется, что это не правильно, «это», я одержим. – uldall

 Смежные вопросы

  • Нет связанных вопросов^_^