2014-04-02 5 views
4

다트와 그 JS interop을 사용하고 있습니다. 나는 다트에 다음과 같은 자바 스크립트 코드를 변환 할 필요가 :Dart 's 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}) 
]);