我有一个表格与形式,姓氏,姓氏,电子邮件和一个矩形.我必须插入,在矩形,一个数组与时间线等点的数组.我创建一个客户与形式,姓氏,姓氏和电子邮件,将它们添加到indexeddb,加载它们以后插入矩形数组.之后,我想把newobjectstore
放在indexeddb中,其中的email与我选择/插入的客户的email相同。但是使用此代码,我的数组将被放入一个新的Objectstore中,并具有自己的ID。
function cmd_SaveRec(hypeDocument, elementID)
{
hypeDocument.getElementById('rectext').innerHTML = hypeDocument.getElementById('beschriftung').value;
var store_cust = db.transaction(["customer"], "readwrite").objectStore("customer").index("rectangle");
var cursorReq = store_cust.openCursor();
cursorReq.onsuccess = function (e) {
cursor = e.target.result;
if(cursor) {
if(cursor.value.email == mailAdd)
{
//cursor.update([rec_ar]);
if(store_cust.objectStore.put({rectangle: [rec_ar]}))
{
console.info(store_cust.objectStore);
console.info('Gespeichert');
alert("Gespeichert");
} else {
console.info('cmd_SaveRec::Problem');
}
}
cursor.continue();
}
};
cursorReq.onerror = function(e) {
console.log("Error");
console.dir(e);
}
}
var store_cust = evt.currentTarget.result.createObjectStore(
DB_STORE_NAME_CUSTOMER, { keyPath: 'cust_id', autoIncrement: true });
store_cust.createIndex('form', 'form', { unique: false }); //
store_cust.createIndex('surname', 'surname', { unique: false });
store_cust.createIndex('lastname', 'lastname', { unique: false });
store_cust.createIndex('email', 'email', { unique: true });
store_cust.createIndex('rectangle', 'rectangle', { unique: false, multiEntry: true });
1条答案
按热度按时间r1zhe5dt1#
简答
objectStor.put(data, key)
或中提供标识符/密钥作为第二个参数说明
如文档中所述:
IDBObjectStore接口的put()方法更新数据库中的给定记录,或者如果给定项不存在,则插入新记录。(source developer.mozilla.org)
您使用的方法
objectStore.put()
用于 * 插入或更新 * 任务。如果我理解正确,您正在寻找 * 更新 * -cursor.update()
是您的朋友(您已注解掉)。-这是首选方法!但是你可以用这两种方法来做。假设你想更新,但是如果记录不存在,就创建一个。在这种情况下,引擎必须知道你的记录是否存在,以及你想更新什么记录。
如果你的
objectStore
使用autoIncrementing主键,记录的标识符不在记录本身,所以你必须提供id作为put()
函数的第二个参数。我发现自己处理id更容易。然后id是记录的一部分(在objectStore创建时提供的
keypath
下可以找到)。然后您的代码可以按预期工作......当然,您必须为id添加一个key:value对。示例
如果你的数据库中有一个主键:
顺便说一句
不要使用if-else来检查事务的完整性-它是异步的-如果/else每次都在这里-使用回调,就像我在上面的例子中所说的那样(
onsuccess
)。你应该读一下我引用的文档。Mozilla是一个很好的indexedDB资源。