0

我正在使用 Cordova 2.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 的第二个参数是当点击 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 也是异步的,那么第二个警报也会立即触发;否则会在 writeLocal 返回时触发。

于 2012-10-17T13:40:18.463 回答