2014-11-08 207 views
0

我有下面的自定義元素,我想在同一個文件進行註冊註冊自定義元素

custombtn.dart:

class SubmitFonix extends HtmlElement { 

    String name; 

    factory SubmitFonix([String name]) => (new Element.tag(tag) as SubmitFonix) 
     ..name=name 
     ; 

    SubmitFonix.created() : super.created() { 
    ... 
} 
目前

,我註冊在主功能的元件,爲這樣:

void main() { 
    document.registerElement(SubmitFonix.tag, SubmitFonix); 
} 

我想登記的行添加,而不是在主()福具有它的custombtn.dart文件, nction,但如果我不能!

在polymer.dart

,我注意到他們使用如下語句:

@initMethod 
upgradePaperFocusable() => registerDartType('paper-focusable', PaperFocusable); 

和其他文件,他們有:

const initMethod = const InitMethodAnnotation(); 

class InitMethodAnnotation { 
const InitMethodAnnotation(); 
} 

因此,使用相同的概念嘗試,並更新我的自定義元件文件如下:

class SubmitFonix extends HtmlElement { 

    String name; 

    factory SubmitFonix([String name]) => (new Element.tag(tag) as SubmitFonix) 
     ..name=name 
     ; 

    SubmitFonix.created() : super.created() { 
    ... 
} 
@initMethod 
upgradeCustomBtn() => document.registerElement(SubmitFonix.tag, SubmitFonix); 

在執行時,我在控制檯得到了這個錯誤:

Exception: type 'HtmlElement' is not a subtype of type 'SubmitFonix' in type cast. 
submit_btn.dart:10 
SubmitFonix.SubmitFonix. 

submit_btn.dart:10是:工廠SubmitFonix([字符串名])=>(新Element.tag(標籤)作爲SubmitFonix)

任何思想?

回答

0

@initMethod是聚合物註釋,你只能使用它,如果你使用聚合物,我假設你沒有。如果你將registerElement從main移開,你需要將它放到一個直接或間接從main調用的函數或方法中。

+0

感謝@Gunter,您的評論以及此:http://stackoverflow.com/questions/26821567/custom-annotation-metadata-in-dart-lang/26830363#26830363和此:http://stackoverflow.com/questions/26826521 /由他們的元數據執行bundle-of-functions-tag-in-dart-lang幫助我解決了這個問題 – 2014-11-10 07:03:47