2

私は、ダルチザンがSoundCloud JavaScript SDK ( http://developers.soundcloud.com/docs/api/sdks#javascript )を使いやすくするライブラリを書こうとしています。

「dart:js」ライブラリを使用しており、プロキシを処理するために 1 つのクラスのみを使用しています。

class SCproxy {
   JsObject proxy = context['SC'];
   String client_id;

SCproxy(this.client_id) {}  

initialize() {
   proxy.callMethod('initialize', [client_id]);
}
stream(String track_id){
   var track = new JsObject(proxy.callMethod('stream',[track_id]));
   print(track); // track should be the soundmanager2 object that we can call '.play' on.
}

これをホストしているレポは ( https://github.com/darkkiero/scproxy )

「ストリーム」メソッドを実行しようとすると、問題が発生します。

main() {
   SCproxy SC = new SCproxy('Your SoundCloud API client_ID');
   SC.initialize();
   SC.stream('/tracks/111477464'); 
}

javascript 'SC.stream' メソッドによって返された soundmanager2 オブジェクトを取得して使用しようとすると、dart エディターで次の例外が発生します。

Breaking on exception: type 'ScriptElement' is not a subtype of type 'JsFunction' of 'constructor'.

「SC.stream」のコールバックを収集することで、soundmanager2 オブジェクトの dart JsObject を取得できるはずだという印象を受けていますが、方法はわかりません。しかし、「dart:js」を完全に誤用している可能性があります。それも有益な情報になります。

4

1 に答える 1

3

SoundCloud JavaScript SDK ドキュメントに従っていないようです。特にstream、コールバックをパラメーターとして取り、返さないメソッドの場合。

次の Dart コード:

context['SC'].callMethod('stream', ['/tracks/293', (sound) {
  sound.callMethod('play');
}]);

この JS コードと同じことを行います:

SC.stream("/tracks/293", function(sound){
  sound.play();
});

詳細については、Using JavaScript from Dartを参照してください。

于 2013-12-14T20:21:45.133 に答える