为什么在onupgradeneeded事件中createObjectStore?

为什么在onupgradeneeded事件中createObjectStore?

为什么在onupgradeneeded事件中createObjectStore,而不是onsuccess事件中创建?

request.onupgradeneeded = function(e) { 

            var store = null;

            db = e.target.result;

            console.log('upgradeneeded');

            if (!db.objectStoreNames.contains(osName)) {

                db.createObjectStore(osName, {autoIncrement: true})

            }            

 }


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

这是indexedDB数据库中规定的在onupgradeneeded事件中创建和维护数据表及更新ObjectStore,等创建或者升级成功之后会调用success事件。

祝学习愉快!

  • sherryliu 提问者 #1
    onupgradeneeded事件不是在版本号更改后才会调用函数吗?如果版本号不更改,事件函数不就不能调用吗?
    2018-12-04 13:46:16
  • 好帮手慕星星 回复 提问者 sherryliu #2
    第一次执行的时候可以理解成版本更新,因为开始是没有这个数据库的,所以会执行onupgradeneeded事件。在这个事件中判断了是否包含指定数据表,如果不包括会直接创建。等数据表存在但是没有版本更新的时候,onupgradeneeded事件就不会执行了。
    2018-12-04 13:51:54
  • sherryliu 提问者 回复 好帮手慕星星 #3
    不懂,课程中是手动修改了版本号,onupgradeneeded事件才执行,手动修改之前并不会执行事件函数。版本号这个概念也不懂,设置为2和设置为1有什么不同的作用。
    2018-12-04 14:32:31
好帮手慕星星 2018-12-04 17:21:24

1、当第一次打开页面时,代码执行的顺序是:

http://img1.sycdn.imooc.com//climg/5c0641f200016a3202220069.jpg

先执行onupgradeneeded事件,再执行success事件。就是老师上次的解释:

第一次执行的时候可以理解成版本更新,因为开始是没有这个数据库的,所以会执行onupgradeneeded事件。在这个事件中判断了是否包含指定数据表,如果不包括会直接创建。

继续刷新页面,结果为:

http://img1.sycdn.imooc.com//climg/5c0645c80001717e02210043.jpg

只执行了success事件这是因为版本号没有更新。这时候手动修改版本号之后才会执行onupgradeneeded事件。

2、版本号是版本的标识号,例如每一个软件都有一个版本号,Chrome浏览器现在的版本是:

http://img1.sycdn.imooc.com//climg/5c06467d000134b905720150.jpg

软件做出改动时,就会版本更新。

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师