此功能已弃用且不再维护。
dhtmlxScheduler 可以很好地应用于基于 JavaScript 和 HTML 构建的 Windows Store 应用。
专为 Windows Store 应用定制的 dhtmlxScheduler 版本可在此下载:https://dhtmlx.com/x/download/regular/dhtmlxScheduler_windows.zip。
如需快速入门,可参考分步教程 - Basic Windows 8 app with dhtmlxScheduler。
要开始使用 dhtmlxScheduler,需要包含以下 4 个文件:
//核心文件
<script src="/lib/dhtmlxscheduler.js"></script>
<link href="/lib/dhtmlxscheduler.css" rel="stylesheet" />
请注意,这只是运行 dhtmlxScheduler 应用所需的最小文件集。如果您的应用使用了 scheduler 扩展的功能,请确保同时添加相应的扩展文件。
scheduler 的初始化方式与常规方法一致:
<div id="scheduler_here" class="dhx_cal_container" style='width:100%; height:100%;'>
<div class="dhx_cal_navline">
<div class="dhx_cal_prev_button"> </div>
<div class="dhx_cal_next_button"> </div>
<div class="dhx_cal_today_button"></div>
<div class="dhx_cal_date"></div>
<div class="dhx_cal_tab" name="day_tab" style="right:204px;"></div>
<div class="dhx_cal_tab" name="week_tab" style="right:140px;"></div>
<div class="dhx_cal_tab" name="month_tab" style="right:76px;"></div>
</div>
<div class="dhx_cal_header">
</div>
<div class="dhx_cal_data">
</div>
</div>
app.onactivated = function (args) {
if (args.detail.kind === activation.ActivationKind.launch) {
if (args.detail.previousExecutionState !==
activation.ApplicationExecutionState.terminated) {
WinJS.Utilities.ready(function(){
scheduler.init('scheduler_here');
}, true);
} else { }
args.setPromise(WinJS.UI.processAll());
}
};
scheduler 的配置方式同样与常规用法一致:
WinJS.Utilities.ready(function(){
scheduler.config.multi_day = true;
scheduler.config.details_on_create = true;
scheduler.config.details_on_dblclick = true;
scheduler.init('scheduler_here', new Date(2012, 10, 1), "month");
}, true);
要向 scheduler 加载数据,请使用 parse 方法:
var storeItems = [
{ text:"Friday", start_date:"11.04.2012 00:00",end_date:"11.05.2012 17:00" },
{ text:"New Year",start_date:"11.05.2012 14:00",end_date:"10.05.2012 17:00" },
{ text:"Birthday",start_date:"11.06.2012 16:00",end_date:"11.06.2012 17:00" }
];
WinJS.Utilities.ready(function(){
scheduler.init('scheduler_here');
scheduler.parse(storeItems, "json");
}, true);
每个数据项都应包含以下必填属性:
通常情况下,DataProcessor 负责在 scheduler 中处理 CRUD 操作,但其与 Windows 8 应用不兼容。因此,在这些应用中,需要通过事件手动处理 CRUD 操作。
scheduler.attachEvent("onConfirmedBeforeEventDelete", function(id, event){
// 你的自定义代码
});
scheduler.attachEvent("onEventChanged", function (id, event) {
// 你的自定义代码
});
scheduler.attachEvent("onEventAdded", function (id, event) {
// 你的自定义代码
});
以下是实现“插入”操作的通用示例。“删除”、“更新”和“读取”操作的实现方式类似。
//连接到 indexedDb,连接成功后触发回调
function connect(callback){
try{
var db = null;
var req = window.indexedDB.open("SchedulerApp", 1);
req.onsuccess = function (ev) {
db = ev.target.result;
if(callback)//连接成功后触发回调
callback(db);
}
req.onupgradeneeded = function(e){
//连接新数据库或更改版本时触发
//这是定义数据库结构(对象存储)的唯一地方
var db = ev.target.result;
if (!db.objectStoreNames.contains("events")) {
//创建数据存储,将 'id' 设为自增主键
var events = db.createObjectStore(
"events",
{ keyPath: "id", autoIncrement: true }
);
}
}
}catch(e){
}
}
//将 js 对象添加到数据库,成功后触发回调
function insertEvent(data, callback) {
connect(function (db) {
var store = db.transaction("events", "readwrite").objectStore("events");
var updated = store.add(data);
updated.onsuccess = function (res) {
callback(res.target.result);
}
});
}
// 使用上述所有方法与 dhtmlxScheduler 配合
// 当用户在 scheduler 中添加事件时,将其保存到数据库
scheduler.attachEvent("onEventAdded", function (id) {
var ev =copyEvent(scheduler.getEvent(id));//copyEvent - 深拷贝函数
delete ev.id;//数据库会分配真实 id
insertEvent(ev, function (newId) {
scheduler.changeEventId(id, newId);//在应用中更新事件 id
});
return true;
});
部分标准 scheduler 中的功能在 Windows Store 应用中不支持: