1

Я пытаюсь использовать Lee Crossley's WP8 plugin-datetime-picker для WP8-приложения моего приложения Cordova.Cordova WP8 DatePickerPlugin callback не найден

У меня уже есть версии приложений для iOS, Android и Fireos, работающих с их собственными плагинами datepicker, но я изо всех сил пытаюсь заставить эту версию работать.

Я инстанцирует ловильного так:

<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); 
} 

DatePicker, и 'в doDatePick' регистрируется. Но когда я подтверждаю новую дату в datepicker, ничего не регистрируется и отчеты Visual Studio «Не удалось найти обратный вызов для id: DateTimePicker» в окне вывода. Излишне говорить, что поле ввода не обновляется моей выбранной датой.

Я уверен, что проект Кордовы настроен правильно; Я установил все необходимые мне плагины и сделал сборку, прежде чем добавлять код через Visual Studio. Другие плагины сторонних разработчиков, такие как плагин SqlLite от Chris Brody, отлично работают.

Любые советы очень ценятся.

+0

Там было изменение в Кордову, что привело к этому, я работаю над решением и сообщил о возможном основном вопросе: https://issues.apache.org/jira/browse/CB-7693 –

+0

Datepicker не отображается в моем случае. В журналах это то, что я нашел - «datetimepicker» - это неопределенный файл: «Любая идея, почему эта ошибка регистрируется, и мой datepicker не отображается? Любая помощь будет принята с благодарностью. –

ответ

2

Я сообщил the core issue команде Кордовы.

В качестве временного решения, метод platforms\wp8\cordovalib\Commands\BaseCommand.csDetatchHandlers() может быть заменен:

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); 
      } 
     } 
    } 

Я знаю, что это хак, но это поможет вам идти. Вы могли бы использовать более старую версию Кордовы.

+1

Взлом или нет, он отлично работает. Большое спасибо за быстрое разрешение! – DaveSav

2

Я решил эту проблему на github.

No result handle issue

Просто я сохранил обработчик в selectDate методе DateTimePicker.cs класса читать, что обратно на ResultHandler словаря перед тем DispatchCommandResult.

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 + "")); 
    } 
} 
+0

Это выглядит потрясающе! – systempuntoout