Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.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 indexeddb objectstore.add()键路径=';id';_Javascript_Key_Add_Indexeddb - Fatal编程技术网

Javascript indexeddb objectstore.add()键路径=';id';

Javascript indexeddb objectstore.add()键路径=';id';,javascript,key,add,indexeddb,Javascript,Key,Add,Indexeddb,我有一些对象存储,并将它们分开。在chrome extension的初始安装期间,我将数据添加到各种对象存储中,我希望确保数据正确对齐。因此,当安装过程中出现不同步时。“keypath/id”将正确匹配。没什么大不了的 首次安装后出现问题。并添加另一个记录。 初始记录的“id”/keyPath/key显示id:1、id:2、id:3等 但在初始安装后需要记录。在将密钥添加到objectstore之前,我不再知道它将是什么。我是否缺少一个代码片段,以便创建一个对象并添加到objecstore中,从

我有一些对象存储,并将它们分开。在chrome extension的初始安装期间,我将数据添加到各种对象存储中,我希望确保数据正确对齐。因此,当安装过程中出现不同步时。“keypath/id”将正确匹配。没什么大不了的

首次安装后出现问题。并添加另一个记录。 初始记录的“id”/keyPath/key显示id:1、id:2、id:3等

但在初始安装后需要记录。在将密钥添加到objectstore之前,我不再知道它将是什么。我是否缺少一个代码片段,以便创建一个对象并添加到objecstore中,从而也可以添加id,或者我是否将最初创建id:1的过程搞糟了,是否应该使用keyPath:1或key:1或Primarykey:1之类的东西

我可以走很长的路,用一些承诺,还有

objectstore.add(object)
.then(objecstore.get(event.key) 
.then(objestore.put(key, {"id":key}) 
我确实注意到,请记住上面的正确承诺代码。但是objectstore.add,然后在添加密钥后获取密钥,然后更新“id”的.put({“id”:key})完成,这是它的jist。我正试图从一开始就避免这样做

有点像在类似SQL的数据库中,有两个主键,分别是数字、自动增量,对于同一个表在各个方面都完全相同。但在我的例子中,密钥会更新,“id”会占用空间。并且不确定如何从初始启动中删除“id”。或者,一旦完成,如何保持密钥和“id”同步,而不需要一堆额外的废话

下面代码中的注释,试图找出它。到目前为止,我自己还没有弄明白

const-ms\u-master=[{
//========================
//我在创建id时搞砸了吗?应该像keypath:1那样使用吗?
//========================
“id”:1,
“baseurl”:“www.example1.net”,
“前缀”:“ex1”,
“名称”:“试用1”,
}, {
“id”:2,
“baseurl”:“www.something.com”,
“前缀”:“所以”,
“姓名”:“一些”,
}, {
“id”:3,
“baseurl”:“woops.org”,
“前缀”:“woo”,
“名称”:“arghs”,
}]
var-db;
var request=window.indexedDB.open(“mystyle”,1);
request.onerror=函数(事件){
日志(“错误:”)
};
request.onsuccess=函数(事件){
db=event.target.result;
console.log(“成功:+db”);
};
request.onupgradeneeded=函数(事件){
var db=event.target.result;
如果(!db.objectStoreNames.contains(“ms_master”)){
//========================
//我在创建商店的过程中搞砸了吗?
//========================
var objectStore=db.createObjectStore(“ms_master”{
密钥路径:“id”,
自动递增:真,
独一无二:真的
});
createIndex(“baseurl”、“baseurl”{
唯一:错误
});
createIndex(“前缀”、“前缀”{
唯一:错误
});
createIndex(“名称”、“名称”{
唯一:错误
});
//========================
//似乎没什么区别
//========================
//createIndex(“id”,“id”,{unique:true});
用于(ms_master中的变量i){
objectStore.add(ms_master[i]);
}
//========================
//添加后,我是否应该执行objecstore.get并获取数据,然后执行其中没有“id”的objectstore.put?
//========================
}
$(文档).ready(函数(){
document.getElementById('ms_table_add')。addEventListener(“单击”,ms_table_add);
}
函数ms_table_add(){
var-db;
var request=indexedDB.open('mystyle',1);
request.onsuccess=函数(e){
db=e.target.result;
var transaction=db.transaction('ms_master','readwrite');
var objectStore=transaction.objectStore('ms_master');
var myobj=[
“身份证”,
“姓名”,
“前缀”,
“基本URL”
];
var myarray={};
对于(var h=0;h

添加站点


您同时使用了两个功能—直列键和键生成器。我将分别解释它们,然后介绍它们是如何组合的

行内键和行外键

行内键的键值显示在记录本身中-具有keyPath的存储使用行内键。相反,行外键的键值是分开的

var storeWithOutOfLineKeys = db.createObjectStore('s1');
storeWithOutOfLineKeys.put({name: 'alice'}, 1);

var storeWithInLineKeys = db.createObjectStore('s2', {keyPath: 'id'});
storeWithInLineKeys.put({name: 'bob', id: 1});
如果没有为具有外线键的存储提供显式键,则对
put()
add()
的调用将失败。如果向具有内线键的存储提供显式键,则对
put()
add()
的调用将失败,如果记录不包含
var request = store.put({name: 'alice'});
request.onsuccess = function() {
  console.log('put got generated key: ' + request.result;
};
var storeWithOutOfLineKeys = db.createObjectStore('s1', {autoIncrement: true});
storeWithOutOfLineKeys.put({name: 'alice'});
var storeWithInLineKeys = db.createObjectStore('s2', {keyPath: 'id', autoIncrement: true});
storeWithInLineKeys.put({name: 'bob'}).onsuccess = function(e) {
  var id = e.target.result;
  storeWithInLineKeys.get(id).onsuccess = function(e) {
    console.log(JSON.stringify(e.target.result));
    // {"name": "bob", "id": 1}
  });
});
storeWithInLineKeys.put({name: 'eve', id: 1}); // overwrites old #1
objectStore.add({name: "myData"}, 47);
const ms_master = [{
      "id": 1,
      "baseurl": "www.example1.net",
      "prefix": "ex1",
      "name": "tryout1",
    }, {
      "id": 2,
      "baseurl": "www.something.com",
      "prefix": "so",
      "name": "some some",
    }, {
      "id": 3,
      "baseurl": "woops.org",
      "prefix": "woo",
      "name": "arghs",
    }]
var storeWithOutOfLineKeys = db.createObjectStore('s1');
storeWithOutOfLineKeys.put({name: 'alice'}, 1);
var storeWithOutOfLineKeys = db.createObjectStore('s1', {autoIncrement: true});
storeWithOutOfLineKeys.put({name: 'alice'});
var storeWithOutOfLineKeys = db.createObjectStore('s1', {autoIncrement: true});
//for initial putting data into indexeddb (during install of chrome extension)
storeWithOutOfLineKeys.add({name: 'alice'}, 1);
//for adding data at a later time
storeWithOutOfLineKeys.add({name: 'alice'});
//for updating something...
storeWithOutOfLineKeys.put({name: 'alice'}, 1);