【问题标题】:How do I add a new entry using dexie.js如何使用 dexie.js 添加新条目
【发布时间】:2016-01-19 20:54:33
【问题描述】:

使用 Dexie 我正在尝试添加一个新条目,但如果我指定了 ID 号,我只能添加它。我希望 id 作为主键自动递增,我该如何实现?

这行得通

var db = new Dexie("user-database");
db.version(1).stores({
    users: "id++"
});
db.open(); 
var insert_data = {id:5,name: "Paul", email: "test@test.com", user_group: 2};
db.users.add(insert_data);

但是,如果我从插入对象中取出 id,它就不起作用。见下文

这不起作用

var db = new Dexie("user-database");
db.version(1).stores({
    users: "id++"
});
db.open(); 
var insert_data = {name: "Paul", email: "test@test.com", user_group: 2};
db.users.add(insert_data);</code>

有什么想法吗?

【问题讨论】:

标签: javascript angularjs indexeddb dexie


【解决方案1】:

id 将被附加检查它。

截图:

Demo

html:

Name:<input type="text" name="name" id="name"/><br/>
Email<input type="text" name="email" id="email"/></br>
<button>add new</button>

javascript:

// Declare db instance
var db = new Dexie("test-database");

// Define Database Schema
db.version(1).stores({
    users: "++id, name, email"
});

// Open Database
db.open(); 

function add_new(name,email){
    // Interact With Database
    db.transaction('rw', db.users, function () {
        // Let's add some data to db:
        insert_object = {name:name,email:email};
        db.users.add(insert_object);
    }).catch(function(err) {
        console.error(err.stack || err);
    });    
}

add_new("susheel singh","susheel61@gmail.com");//default content
document.querySelector("button").addEventListener("click",function(e){
    add_new(document.getElementById("name").value,document.getElementById("email").value);
});

【讨论】:

    【解决方案2】:

    您必须在重新定义另一个架构之前删除数据库。

    更新小提琴:https://jsfiddle.net/dfahlander/eb9yt0s7/

    var db = new Dexie("test-database");
    db.version(1).stores({
        users: 'id,name,email'
    });
    document.write ('hello');
    db.delete().then(function (){
      return db.open ();
    }).then (function (){
      var insert_object = {id:2,name:'Bob',email:'test@test.com'};
      return db.users.add(insert_object);
    }).then(function(){
        return db.delete (); // don't forget to delete if changing prim key
    }).then (function (){
        db = new Dexie("test-database");
        db.version(1).stores({
            users: 'id++'
        });
        return db.open();
    }).then(function (){
        var insert_object = {name:'Jim',email:'jim@test.com'};
        db.users.add(insert_object);
    }).then(function (){
       return db.users.toArray();
    }).then (function (result){
      document.write(JSON.stringify (result));
    }).catch (function (e) {
      document.write ('error: ' + e);
    });
    

    如果您没有更改主键,而只是添加或删除索引,则您可以关闭数据库,然后添加 db.version (2) 以及更改索引或添加 /removed 表。

    【讨论】:

      猜你喜欢
      • 2011-09-01
      • 2021-09-18
      • 2016-04-30
      • 2021-06-15
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 1970-01-01
      • 2021-12-19
      相关资源
      最近更新 更多