2013-03-09 55 views
1

我正在使用帶有一些動畫的Web_ui程序包創建自定義元素的Dart項目。我希望做的是對的元素像這樣的飛鏢代碼中....調用Web組件的方法並響應事件

class MyElement extends WebComponent { 
    ... 

    void StartAnimation() { ... } 

    ... 
} 

然後在鏢應用程序本身我有這樣的事情的main()函數..

void main() { 
    MyElement elm = new MyElement(); 
    elm.StartAnimation(); // Kicks off the animation 
} 

Dart編輯器告訴我,當前不支持直接構建Web組件。然後它說使用WebComponent.forElement - 但我不清楚如何使用它來實現我的目標。

回答

3

雖然您尚未將Web組件導入Dart文件,但可以通過query().xtag訪問它們。 xtag爲您提供了元素與之關聯的Web組件實例的參考。您必須小心,您允許完成Web UI設置,以便爲xtag賦予一個值。

下面是一個例子:

import 'dart:async'; 
import 'dart:html'; 
import 'package:web_ui/web_ui.dart'; 

main() { 
    Timer.run(() { 
    var myElement = query('#my-element').xtag; 
    myElement.startAnimation(); 
    }); 
} 

這將讓用進口部件的能力更好,直接繼承元素,也許這保證您得到正確的類從一query()回一些生命週期事件。這就是例證應該看起來在未來:

import 'dart:async'; 
import 'dart:html'; 
import 'package:web_ui/web_ui.dart'; 
import 'package:my_app/my_element.dart'; 

main() { 
    MyElement myElement = query('#my-element'); 
    myElement.startAnimation(); 
} 
+0

我一直在嘗試,但myElement始終爲空。即使編輯器也會將可變的紫色顯示爲空白。當然,當我嘗試運行代碼時,出現錯誤「null對象沒有方法'StartAnimation'。」 – user2070136 2013-03-09 22:25:55

+0

好吧,剛剛得到它。我明白你的意思是需要確保足夠的時間過去,以便xtag具有價值。有沒有更好的方法可以讓你知道,而不是一個計時器來了解xtag何時準備好? – user2070136 2013-03-10 00:08:18

+0

不是我所知道的,我相信這不是一個讓事件堆棧放鬆的時間量的問題,所以'Timer.run()'應該足夠了。 – 2013-03-10 01:35:02