2015-05-11 17 views
5

Chcę zaimplementować następujący kod w Dart:Odnosząc się do „tego” w Dart JS współdziałanie

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

Moja implementacja Dart wygląda tak:

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

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

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

Niestety otrzymuję następujący błąd, gdy uruchomiony kod:

The null object does not have a method 'callMethod'

na następujący wiersz:

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

Kontekst ["ten"] wydaje się być pusty, więc moje pytanie brzmi: w jaki sposób mogę odnieść się do "tej" zmiennej z Dart?

UPDATE 1: Pełne przykład kodu można znaleźć na github: https://github.com/uldall/DartCocos2dTest

+0

Zgaduję, że popełniono literówkę: 'context [this] .callMethod (" _ super ");' (bez cudzysłowów). – GuyT

+0

Bez cytatów "this" odnosi się do instancji klasy HelloWorldScene Dart. Chcę wywołać funkcję _super() na zmiennej "this" znajdującej się w VM Javascript. – uldall

+0

Czy możesz opublikować pełny przykład. Proszę? – Robert

Odpowiedz

1

Można uchwycić JS this z JsFunction.withThis(f). Przy tej definicji dodatkowy argument zostanie dodany jako pierwszy argument. Zatem twój kod powinien być:

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

Teraz pojawia się następujący błąd: 'NoSuchMethodError: method not found: '_super''. Wygląda na to, że nie jest to właściwe "to". – uldall