0

私はCordova2.1.0とこのgithubにあるプロンプトプラグインを使用しています。プラグインを.h、.m、および.jsファイルで正しく設定し、index.htmlに適切にリンクしました。

私が抱えている問題は、プロンプト関数が呼び出されたときに、ユーザーがテキスト文字列を入力するのを待たずに次の関数に進むことです。次の関数では、ユーザーのテキスト文字列を使用してフォーム値をローカルストレージに保存します。ストレージのIDとして。この問題により、ローカルストレージのキーと値のペアが空白キーで保存され、ストレージシステムが破壊されます。

これは、Promptプラグインを呼び出すために使用するコードのサンプルです。

function doPrompt() {
    window.plugins.Prompt.show(
        "What is the name of this job?",
        function (userText) {
            $('#promptinput').text(userText)
        }, 
        function () {
        },
        "Save",
        "Cancel"
    );
};

そして、ここからプロンプトプラグインと値を格納する関数を呼び出すサンプルを示します。

function showPrompt() {
    doPrompt();
    alert("prompted");
    writeLocal();
    alert("written");
}

アラートがそこにあるので、次の関数がいつ移動され、writeLocal関数がlocalstorageが書き込まれる場所であるかを確認できます。

これに関するどんな助けも素晴らしいでしょう。これを正しく機能させるために、しばらくの間トラブルシューティングを行ってきました。

4

1 に答える 1

1

ええ、非同期コードがどのように機能するかについて少し読む必要があります。window.plugins.Prompt.showの2番目の引数は、[OK]ボタンがクリックされたときに呼び出されるコールバックです。ユーザーがOKを押すのを「待つ」ものはありません。コードはノンブロッキングです。

あなたはこのようなものが欲しいです:

function doPrompt() {
    window.plugins.Prompt.show(
        "What is the name of this job?",
        function (userText) {
            $('#promptinput').text(userText);
            alert("prompted");
            writeLocal();
            alert("written");
        }, 
        function () {
        },
        "Save",
        "Cancel"
    );
};

これで、ユーザーが[OK]をクリックすると、#promptinputが設定され、アラートが発生してから、writeLocalが呼び出されます。writeLocalも非同期の場合、2番目のアラートもすぐに発生します。それ以外の場合は、writeLocalが戻ったときに起動します。

于 2012-10-17T13:40:18.463 に答える