0

我正在编写一个基于 DHTMLxScheduler 的通知应用程序。

我想了解更多关于 IndexedDB 为 DHTMLxscheduler 提供的 CRUD 的想法

据我所知,以下网站展示了一个很好的例子

http://www.codeproject.com/Articles/594924/Build-Calendar-App-for-Windows-8-with-dhtmlxSchedu

但是,数据存储不是持久的,应用程序会在多点触控事件期间冻结。

有没有人可以使用以下方法通过其默认 IndexedDB 帮助指导 CRUD 所需的编码?

    scheduler.attachEvent("onEventDeleted", 
              function(event_id,event_object){
    //add event to the data store
}); 

scheduler.attachEvent("onEventChanged", function(event_id, event_object){
    //update event in the data store 
}); 


scheduler.attachEvent("onEventAdded", function(event_id, event_object){
    //delete event from the data store 
});    

以下示例显示了如何通过 IndexedDB http://www.dotnetcurry.com/ShowArticle.aspx?ID=868进行集成

但是,它们共享不同的框架,而原始调度程序示例始终使用回调来检测更改。

非常感谢你的帮助!

4

1 回答 1

0

IndexedDB 为 CRUD 操作占用了相对较多的代码,因此教程已被严重简化,以免因实现细节而使其过载。还有一个完整的工作 CRUD 示例,检查这个包的“/samples/CalendarApp/”文件夹:http: //dhtmlx.com/x/download/regular/dhtmlxScheduler_windows.zip

至于多点触控问题,很可能会在最近的时间修复。当前版本的软件包基于 dhtmlxScheduler3.7,我们将把它更新到 4.0,它对基于 Windows 的触摸设备进行了改进。

这是一个数据库处理的例子,类似于它在 dhtmlx 网站的应用程序中的处理方式。

//connect to indexedDb and fire the callback on success
function connect(callback){
    try{
        var db = null;

        var req = window.indexedDB.open("SchedulerApp", 1);
        req.onsuccess = function (ev) {
            db = ev.target.result;
            if(callback)//fire a callback on connect
                callback(db);
        }

        req.onupgradeneeded = function(e){
            //The event is fired when connecting to the new database, or on version change.
            //This is the only place for defining database structure(object stores)
            var db = ev.target.result;

            if (!db.objectStoreNames.contains("events")) {
                //create datastore, set 'id' as autoincremental key
                var events = db.createObjectStore("events", { keyPath: "id", autoIncrement: true });
            }
        }
    }catch(e){
    }
}


//add js object to the database and fire callback on success
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);
        }
    });
}


// use all defined above with the dhtmlxScheduler
// when user adds an event into the scheduler - it will be saved to the database
scheduler.attachEvent("onEventAdded", function (id) {
    var ev = copyEvent(scheduler.getEvent(id));//where copyEvent is a helper function for deep copying
    delete ev.id;//real id will be assigned by the database

    insertEvent(ev, function (newId) {
        scheduler.changeEventId(id, newId);//update event id in the app
    });
    return true;
});

但是,我不能保证它会立即工作,我目前无法测试代码。我还建议您查看MSDN上的这些文章

仅供参考,我为 DHTMLX 工作

于 2013-09-26T08:40:51.387 回答