【问题标题】:Cordova WP8 DatePickerPlugin callback not found未找到 Cordova WP8 DatePickerPlugin 回调
【发布时间】:2014-09-30 21:59:21
【问题描述】:

我正在尝试将 Lee Crossley's WP8 plugin-datetime-picker 用于我的 Cordova 应用的 WP8 风格。

我已经有 iOS、Android 和 Fireos 版本的应用程序运行他们自己的日期选择器插件,但我正在努力让这个版本工作。

我像这样实例化选择器:

<input onclick="doDatePick(this)" readonly name="my-account-dob" id="my-account-dob" value="" class="required" />

并尝试接收这样的输入:

function doDatePick(elem) {
    console.log('at doDatePick');
    var onDateSelected = function (date) {
        console.log('inside function');
        alert(new Date(parseInt(date, 10)));
        console.log(new Date(parseInt(date, 10)));
        $(elem).val(DPgetNamedMonthDate(new Date(parseInt(date, 10))));
    }

    datetimepicker.selectDate(onDateSelected);
}

显示日期选择器,并记录“at doDatePick”。但是,当我在日期选择器中确认新日期时,没有记录任何其他内容,并且 Visual Studio 在其输出窗口中报告“无法找到 id 的回调:DateTimePicker”。不用说,输入框没有更新为我选择的日期。

我确定 Cordova 项目设置正确;在通过 Visual Studio 添加任何代码之前,我安装了我需要的所有插件并进行了构建。其他第三方插件,例如 Chris Brody 的 SqlLite 插件也可以正常工作。

非常感谢任何建议。

【问题讨论】:

  • Cordova 的更改导致了此问题,我正在研究解决方案并报告了可能的核心问题:issues.apache.org/jira/browse/CB-7693
  • 我的情况下没有显示日期选择器。在日志中,这就是我发现的——“'datetimepicker' 是未定义的文件:”知道为什么会记录此错误而我的 datepicker 没有显示吗?任何帮助将不胜感激。

标签: cordova windows-phone-8 datepicker phonegap-plugins timepicker


【解决方案1】:

我已经向 Cordova 团队报告了the core issue

作为临时解决方法,platforms\wp8\cordovalib\Commands\BaseCommand.cs DetatchHandlers() 方法可以替换为:

    public void DetachHandlers()
    {
        this.OnCommandResult = null;
        this.OnCustomScript = null;
        foreach (string callbackId in new List<string>(ResultHandlers.Keys))
        {
            if (!callbackId.ToLower().Contains("datetimepicker"))
            {
                RemoveResultHandler(callbackId);
            }
        }
    }

我知道这是一个 hack,但它会让你继续前进。您也可以使用旧版本的 Cordova。

【讨论】:

  • Hack 与否,它可以完美运行。非常感谢您的快速解决!
【解决方案2】:

我已经在github上解决了这个问题。

No result handle issue

我只是将处理程序保存在DateTimePicker.cs 类的selectDate 方法中,以便在DispatchCommandResult 之前在ResultHandler 字典中读回该处理程序。

public event EventHandler<PluginResult> mySavedHandler;
....
public void selectDate(string options)
{
    ....

    if (ResultHandlers.ContainsKey(CurrentCommandCallbackId))
    {
       mySavedHandler = ResultHandlers[CurrentCommandCallbackId];
    }
    ....
}

private void dateTimePickerTask_Completed(object sender, DateTimePickerTask.DateTimeResult e)
{
    ......
    try
    {
      if (!ResultHandlers.ContainsKey(CurrentCommandCallbackId))
      {
          ResultHandlers.Add(CurrentCommandCallbackId, mySavedHandler);
      }
      .....
      DispatchCommandResult(new PluginResult(PluginResult.Status.OK, result + ""));
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    相关资源
    最近更新 更多