2013-09-10 5 views
0

Я использую YDN DB для IndexedDB, и я хочу удалить запись из хранилища объектов, используя свой идентификатор. Вот моя схема:YDN DB Удалить запись по ID (IndexedDB)

var personsSchema = { 
name: "persons", 
keyPath: "id", 
autoIncrement: true, 
indexes: [{ 
    name: "id", 
    unique: true 
}, { 
    name: "firstname", 
    unique: false, 
    multiEntry: false 
}, { 
    name: "lastname", 
    unique: false, 
    multiEntry: false 
}] 
}; 

schema = { 
    stores: [personsSchema] 
}; 

var db = new ydn.db.Storage("xdb", schema); 

Теперь у меня есть функция, которая будет удалять запись:

function deleteEntry(id){ 
     var id = parseInt(id); 
     var objectStore = "persons"; 
     var iterator = new ydn.db.ValueCursors(objectStore, "id", ydn.db.KeyRange.only(id)); 
     var mode = "readwrite"; 
     request = db.open(iterator, 1).then(function(cursor){ 
      cursor.clear(); 
     }, mode); 
    } 

Эта функция дает мне эту ошибку:

Uncaught ydn.error.ArgumentException: Second argument must be cursor range iterator.

Благодарим за ответы.

ответ

2

Оно должно быть:

function deleteEntry(id){ 
    var id = parseInt(id); 
    var objectStore = "persons"; 
    var iterator = new ydn.db.IndexValueCursors(objectStore, "id", ydn.db.KeyRange.only(id)); 
    var mode = "readwrite"; 
    request = db.open(function(cursor){ 
     cursor.clear(); 
    }, iterator, mode).then(function() { 
     console.log('cleared') 
    }); 
} 

Но поскольку id является первичным ключом, вы не должны быть проиндексированы, это должно быть просто:

function deleteEntry(id){ 
    var id = parseInt(id, 10); 
    var keys = db.remove("persons", id); 
} 

Если идентификатор не является первичным ключом, этот следующий код работает немного более эффективно, поскольку он не извлекает значения записи без необходимости.

function deleteEntry(id){ 
    var id = parseInt(id); 
    var objectStore = "persons"; 
    db.keys(objectStore, "id", ydn.db.KeyRange.only(id)).done(function(keys) { 
     db.remove(objectStore, keys); 
    }; 
} 

Я исправил api doc example.

+0

это дает мне ошибку: Непринятый TypeError: reverse. BTW, спасибо за этот плагин. –

+0

Как вы получаете эту ошибку? –

+0

Я использовал db.remove(). Благодаря! –

Смежные вопросы