2014-04-02 55 views
4

我正在使用Dart及其JS interop。我需要下面的JavaScript代碼轉換成飛鏢:如何使用Dart的JS interop創建匿名JavaScript函數/回調?

ID3.loadTags("filename.mp3", function() { 
    var tags = ID3.getAllTags("filename.mp3"); 
    if (tags.artist) 
    artist.textContent = tags.artist; 
    if (tags.title) 
    track.textContent = tags.title; 
}, { 
    dataReader: FileAPIReader(file) 
}); 

注意匿名回調作爲第二個參數來loadTags。我如何使用Dart和dart:js庫創建它?

我得到的是創建一個命名函數與最接近的:

js.context['loadTagsCallback'] =() { 
    var tags = ID3.callMethod('getAllTags', ["filename.mp3"]); 
    var artistTag = tags['artist']; 
    var titleTag = tags['title']; 

    if (artistTag != null) { 
     artist.text = artistTag; 
    } 

    if (titleTag != null) { 
     track.text = titleTag; 
    } 
    }; 

,然後使用這個飛鏢代碼:

ID3.callMethod('loadTags', [ 
    "filename.mp3", 
    js.context['loadTagsCallback'], 
    new js.JsObject.jsify({'dataReader': id3FileReader}) 
]); 

不過,我不希望創建命名功能。任何想法或提示?

回答

6

飛鏢關閉被自動轉換爲JS關閉時發送越過邊界。你可以這樣做:

ID3.callMethod('loadTags', ["filename.mp3",() { 
    var tags = ID3.callMethod('getAllTags', ["filename.mp3"]); 
    var artistTag = tags['artist']; 
    var titleTag = tags['title']; 

    if (artistTag != null) { 
     artist.text = artistTag; 
    } 

    if (titleTag != null) { 
     track.text = titleTag; 
    } 
    }, 
    new js.JsObject.jsify({'dataReader': id3FileReader}) 
]);