Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 适用于Windows Phone 8的Cordova日历插件_Javascript_Cordova_Windows Phone 8_Phonegap Plugins - Fatal编程技术网

Javascript 适用于Windows Phone 8的Cordova日历插件

Javascript 适用于Windows Phone 8的Cordova日历插件,javascript,cordova,windows-phone-8,phonegap-plugins,Javascript,Cordova,Windows Phone 8,Phonegap Plugins,我正在寻找一个科尔多瓦插件添加事件到WindowsPhone8日历。cordova插件注册表中没有插件。我的解决方法是编写本机插件- public void addCalendarEvents(String str) { string[] calendarValues = str.Split('|'); SaveAppointmentTask saveAppointmentTask = new SaveApp

我正在寻找一个科尔多瓦插件添加事件到WindowsPhone8日历。cordova插件注册表中没有插件。我的解决方法是编写本机插件-

public void addCalendarEvents(String str)
        {
            string[] calendarValues = str.Split('|');           

            SaveAppointmentTask saveAppointmentTask = new SaveAppointmentTask();

            int appointmentYear = Int32.Parse(calendarValues[3]);
            int appointmentMonth = Int32.Parse(calendarValues[4]);
            int appointmentDate = Int32.Parse(calendarValues[5]);
            float appointmentTime = float.Parse(calendarValues[6]);

            DateTime scheduleApptDateStart = (new DateTime(appointmentYear, appointmentMonth, appointmentDate, 7, 0, 0)).AddHours(appointmentTime);
            DateTime scheduleApptDateEnd = (new DateTime(appointmentYear, appointmentMonth, appointmentDate, 7, 30, 0)).AddHours(appointmentTime);
            saveAppointmentTask.StartTime = scheduleApptDateStart;
            saveAppointmentTask.EndTime = scheduleApptDateEnd;
            saveAppointmentTask.Subject = calendarValues[1];
            saveAppointmentTask.Location = calendarValues[2];
            saveAppointmentTask.Details = "";
            saveAppointmentTask.IsAllDayEvent = false;
            saveAppointmentTask.Reminder = Reminder.FifteenMinutes;
            saveAppointmentTask.AppointmentStatus = Microsoft.Phone.UserData.AppointmentStatus.Busy;
            saveAppointmentTask.Show();
        }
并称之为使用

 var inputCalendarString = notes + '|' + title + '|' + location + '|' + appointmentDate.getFullYear() + '|' + (appointmentDate.getMonth() + 1) + '|' + appointmentDate.getDate() + '|' + '1.0' + '|' + ' ';
                cordova.exec(null, null, "AddCalendarEvents", "addCalendarEvents", inputCalendarString);
var inputCalendarString = notes + '|' + title + '|' + location + '|' + appointmentDate.getFullYear() + '|' + (appointmentDate.getMonth() + 1) + '|' + appointmentDate.getDate() + '|' + '1.0' + '|' + ' ';
cordova.exec(null, null, "AddCalendarEvents", "addCalendarEvents", inputCalendarString);

它对一个事件有效,但如果我有事件循环,它就不起作用。它不会在科尔多瓦成功回调。如果有人写了这样的插件,那将是非常有帮助的。

你在哪里说过成功的回调? 根据我的说法,js中的代码应该是-

exec(successCallback,failureCallback,'AddCalendarEvents','AddCalendarEvents',inputCalendarString)


此外,在.cs文件中还需要一个DispatcherCommandResult来返回回调

我做了一个变通办法。使用事件数据的当前索引维护localstorage标志数据。使用resume回调,使用您编写的自定义约会插件添加其余事件。每次应用程序恢复时,您都会增加索引,并从下一个索引中添加事件数据

document.addEventListener('resume', this.resumeApp, false)
 resumeApp: function () {
        if (localStorage.getItem('updatecalendar') == 'false') {
            syncUpdatedCalendarWP8();
        }
    },
document.addEventListener('resume', this.resumeApp, false)
resumeApp: function () {
if (localStorage.getItem('updatecalendar') == 'false') {
syncUpdatedCalendarWP8();
      }
}

在名为AddCalendarEvents.cs的插件目录中创建一个新的cs文件,并添加以下代码-

using Microsoft.Phone.Tasks;
using Microsoft.Phone.UserData;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using WPCordovaClassLib.Cordova;
using WPCordovaClassLib.Cordova.Commands;
using WPCordovaClassLib.Cordova.JSON;

namespace Cordova.Extension.Commands {
    public class AddCalendarEvents: BaseCommand {
        public void addCalendarEvents(String str) {
            string[] calendarValues = str.Split('|');

            SaveAppointmentTask saveAppointmentTask = new SaveAppointmentTask();

            int appointmentYear = Int32.Parse(calendarValues[3]);
            int appointmentMonth = Int32.Parse(calendarValues[4]);
            int appointmentDate = Int32.Parse(calendarValues[5]);
            float appointmentTime = float.Parse(calendarValues[6]);

            DateTime scheduleApptDateStart = (new DateTime(appointmentYear, appointmentMonth, appointmentDate, 7, 0, 0)).AddHours(appointmentTime);
            DateTime scheduleApptDateEnd = (new DateTime(appointmentYear, appointmentMonth, appointmentDate, 7, 30, 0)).AddHours(appointmentTime);
            saveAppointmentTask.StartTime = scheduleApptDateStart;
            saveAppointmentTask.EndTime = scheduleApptDateEnd;
            saveAppointmentTask.Subject = calendarValues[1];
            saveAppointmentTask.Location = calendarValues[2];
            saveAppointmentTask.Details = "";
            saveAppointmentTask.IsAllDayEvent = false;
            saveAppointmentTask.Reminder = Reminder.FifteenMinutes;
            saveAppointmentTask.AppointmentStatus = Microsoft.Phone.UserData.AppointmentStatus.Busy;
            saveAppointmentTask.Show();
        }

        public void getCalendarEventData(String str) {
            ButtonAppointments_Click();
        }

        private void ButtonAppointments_Click() {
            Appointments appts = new Appointments();

            //Identify the method that runs after the asynchronous search completes.
            appts.SearchCompleted += new EventHandler < AppointmentsSearchEventArgs > (Appointments_SearchCompleted);

            DateTime start = DateTime.Now;
            DateTime end = start.AddDays(7);
            int max = 20;

            //Start the asynchronous search.
            appts.SearchAsync(start, end, max, "Appointments Test #1");
        }

        void Appointments_SearchCompleted(object sender, AppointmentsSearchEventArgs e) {
            //Do something with the results.
            //MessageBox.Show(e.Results.Count().ToString());
            try {
                e.Results.ToList();
                MessageBox.Show("Success");
            } catch (System.Exception) {}

        }
    }
}
它适用于一个事件,但如果有事件循环,它将不起作用。要支持多个事件,可以使用事件数据的当前索引维护Localstorage标志和数据。使用resume回调,使用您编写的自定义约会插件添加其余事件。每次应用程序恢复时,您都会增加索引,并从下一个索引中添加事件数据

document.addEventListener('resume', this.resumeApp, false)
 resumeApp: function () {
        if (localStorage.getItem('updatecalendar') == 'false') {
            syncUpdatedCalendarWP8();
        }
    },
document.addEventListener('resume', this.resumeApp, false)
resumeApp: function () {
if (localStorage.getItem('updatecalendar') == 'false') {
syncUpdatedCalendarWP8();
      }
}

使用以下允许将事件添加到本机Windows Phone日历的插件看看这个。您将知道如何使用DispatchCommandResult方法将结果返回到JavaScript,无论是成功还是失败。DispatchRecommandResult在成功打开设备日历界面时激发。我想在活动创建成功后启动它。嗨,我似乎无法让它工作。你能帮我一下吗?照你在这篇文章里说的做。似乎每次我使用phonegap重建时,wp8目录中的config.xml都会清除我为此插件添加的功能节点。另外,我注意到所有其他插件都有一个专用于它们的目录。我必须在plugins目录中为这个插件创建一个目录,还是只把它放在根目录中?最后,我应该把插件放在哪个插件目录中?特定于wp8的插件或phonegap项目根目录中的插件目录?您可以给我一个指向您插件的github链接吗?我非常感谢:)你能从这里试试吗?需要一些时间才能上传到Github。您好,我已经用您提供的代码创建了一个插件,但由于未知原因它无法工作:(请你看一看,也许可以修复我搞砸了的东西,然后做一个拉取请求?想检查一下-你在你的项目中使用了其他PhoneGap插件吗?的确:)一定要在本周末之前添加。现在,这是你发布内容的工作总结。