2015-02-18 3 views
1

У меня есть этот код here, который я конвертирую в Дарт. Проблема связана с обратными вызовами.Dart события в JavaScript

function stop(e) { 
    var node = e.target.getContainer(); 
    node[SMap.LAYER_MARKER].style.cursor = ""; 
    var coords = e.target.getCoords(); 
    alert("Cílová pozice: " + coords.toWGS84(2).reverse().join(" ")); 
} 

var signals = mapa.getSignals(); 
signals.addListener(window, "marker-drag-stop", stop); 

Мой код в Дарта

var signals = mapa.callMethod('getSignals', []); 
    signals.callMethod('addListener', [context, 'marker-drag-stop', stop]); 
} 


stop(MouseEvent event) { 
    var target = event.target.callMethod('getContainer',[]);// problem 
    context.callMethod('alert', ['texttext']); 
} 

Остановка обратного вызова правильно называется, но я не знаю, что делать с var node = e.target.getContainer(); линии. E.target возвращает что-то, но что дальше.

Боковой вопрос: есть mapa.callMethod('addLayer', [layer]).callMethod('enable', []); синтаксис, только один возможный способ вызова методов javascript. Я нахожу это немного громоздким: -/

Весь этот js-interop thingy довольно грязный. Я не могу решить это самостоятельно, и вам нужно снова спросить после каждого шага. Надеюсь, когда я расскажу о всех случаях использования interop, я смогу, просто использовать Дарт и забыть о JS.

ответ

2

Я предполагаю, что это следует сделать трюк:

var target = new js.JsObject.fromBrowserObject(e)['target'] 
    .callMethod('getContainer', []); 
+0

Это, конечно, работал. У вас есть небольшая проблема, можете ли вы сказать мне разницу между «новым JsObject.fromBrowserObject (node ​​[layerMarker]) ['style'] ['cursor'] = '';' который работает и 'var cursor = new JsObject.fromBrowserObject (узел [layerMarker]) [ 'стиль'] [ 'курсор']; cursor = ''; 'возможно, я не могу хранить свойство в переменной. Это также работает как «var cursor = new JsObject.fromBrowserObject (node ​​[layerMarker]); cursor ['style'] ['cursor'] = ''; ' – Zveratko

+0

Я не вижу разницы, кроме того, что во второй версии создается переменная, которая содержит ссылку на' ['cursor'] '. Если вам не нужна эта ссылка позже в вашем коде, вы можете просто пойти с первой версией. Если ответ решает вашу проблему, пожалуйста, примите его, используя галочку под кнопками «вверх/вниз», чтобы понять, на ваш вопрос ответили. –

+0

Если я позже присвою ссылку ['cursor'], она не работает. Итак, вопрос в том, почему, тем не менее, я знаю, как мне обошлось. – Zveratko