1

ちょっとした裏話として、ajax を介して動的に HTML が供給されるページで、jQuery 用のjRecorderプラグインを使用しています。ユーザーは、スライドショーの画像の .wav ナレーションを録音してから、(ajax を介して) 別の画像に切り替え、別のナレーションを録音し、すすぎ、繰り返すことができます。裏話終わり!

質問自体は、一般的にjQ/JSに向けられていると思います。「記録」機能を再度実行すると、コンソールに次のエラーが表示されます。

キャッチされていない TypeError: オブジェクト # にはメソッド 'jStartRecording' がありません

これは、2 番目の画像に切り替えて [記録] をクリックしたときにのみ表示されます。最初のナレーションは問題なく録音され、問題なく再生できます。別のオプション セットを使用して jRecorder を再度呼び出そうとしているため (スライドショーで別の画像に切り替えた後)、jRecorder プラグイン/メソッド/関数を再初期化またはリロードする必要があるため、エラーが発生していると考えています。 . 再度呼び出しているため、何かが完全にロードされていないか、プラグイン操作の各インスタンス間に何らかの競合があるように見えます。

結論: パラメータを動的に切り替えた後に再度実行できるように、jQuery プラグインを再初期化する方法はありますか?

おそらく、私は完全に間違ったツリーを吠えているのでしょう -- わかりません。別の目からの洞察をいただければ幸いです。本当にありがとう!

編集:リクエストに応じて、ここに少しのコードがあります。そして、これがプラグインのソースです。それが役に立てば幸い!

renderPanes()ナレーション レコーダーを含むウィジェットが新しい画像のデータで更新されるたびに呼び出されます。明らかに、簡潔さとセキュリティのために一部の内容が編集されています。

function renderPanes(type, bucket_id) {
var isRecording = false;

$.getJSON( [endpoint] )
.done(function(json){
    [....]

    $.jRecorder({ 
            host : [endpoint],
            callback_started_recording:     function(){callback_started(); },
            callback_stopped_recording:     function(){callback_stopped(); },
            callback_activityLevel:          function(level){callback_activityLevel(level); },
            callback_activityTime:     function(time){callback_activityTime(time); },
            callback_finished_sending:     function(time){ callback_finished_sending() },
            swf_path : '/assets/js/jrecorder/jRecorder.swf',
    });

    $("#narration_play").click(function(){
        var audio = new Audio("[folder path]/"+bucket_id+".wav");
        audio.play();
    });

    $("#narration_record").click(function(){
        if (!isRecording) {
            $.jRecorder.record(30);
            $("#narration_record").html("<i class='icon-stop'></i> Stop");
            isRecording = true;
        } else {
            isRecording = false;
            $("#narration_record").html("<i class='icon-comment'></i> Record");
            $("#narration_play").removeClass('disabled');
            $.jRecorder.stop();
            $.jRecorder.sendData();
        }
    });
});
}
4

0 に答える 0