IndexedDB对象到jQuery自定义触发器事件?

k2arahey  于 2022-12-09  发布在  IndexedDB
关注(0)|答案(1)|浏览(215)

我正在JS中处理IndexedDB功能-我想在成功回调时添加一些带有IndexedDB对象的自定义jquery触发器事件,不确定是否可能,但当我测试事件触发时,它没有传递IndexedDB对象

if ( !window.indexedDB ) {
                console.log( `Your browser not support IndexedDB` ) ;
                return ;
            }
            const request = indexedDB.open( 'pdr' , 1 ) ;
            request.onupgradeneeded = ( event ) => {
                let db = event.target.result ;
                let store = db.createObjectStore( 'CanvasObjects' , {
                    autoIncrement : true
                } ) ;
            } ;
            request.onerror = ( event ) => {
                console.error( `Database error: ${event.target.errorCode}` ) ;
            } ;

            request.onsuccess = ( event ) => {
                const db = event.target.result ;
                console.log(db);
                jQuery( document ).trigger( 'test_db_connected' , db ) ;

            } ;

之后,我使用以下代码对test_db_connected jquery事件执行函数

jQuery( document ).on( 'test_db_connected' , function ( db ) {
    console.log( 'testing_db' ) ;
    console.log( db ) ; 
    const txn = db.transaction( 'CanvasObjects' , 'readwrite' ) ; 
   } ) ;

但使用上面代码会产生错误,
未捕获的类型错误:db.transaction不是函数
进一步检查,我发现在jQuery自定义触发器事件中,request.onsuccess返回的任何对象都是不同的。
是否有可能将IndexedDB对象传递给自定义jquery触发器事件?
感谢您的回复。

p8h8hvxi

p8h8hvxi1#

您没有正确使用jQuery的事件方法。处理程序接受您发送的任何自定义数据的附加参数。因此,您的处理程序应如下所示:

jQuery(document).on('test_db_connected', function(ev, db) {
  console.log('testing_db');
  console.log(db);
  const txn = db.transaction('CanvasObjects', 'readwrite');
  console.log(txn);
});

此外,您确实应该使用jQuery的Event对象来构造和触发自定义事件。docs声明String事件类型参数将用于DOM级别的事件。但这仍然可以正常工作。
Working Solution

相关问题