【问题标题】:knockout and binding to indexeddb objectstore淘汰和绑定到 indexeddb 对象存储
【发布时间】:2014-01-30 03:07:14
【问题描述】:

作为一个基本示例,我单击一个按钮,然后将一条记录输入到 indexeddb 对象存储中。我现在想淘汰用新记录更新的 observable。

下面的代码有效。但是,我想知道这是否是正确的方法。 “getAll”函数是我找到的 IndexedDB-getAll-shim。

self.addPersonRecord = function(){
    // item being added
    data = {name: "Some User", email: "aa2314123@something.com" };
    var obj = db.transaction(["people"], "readwrite").objectStore("people");
    var req = obj.add(data);

    // result of save
    req.onsuccess = function(event) {

        // get all items from db
        obj.getAll().onsuccess = function (ev) {
            // update observable
            self.chosenPageData({people: ev.target.result});
        };
    };

};

【问题讨论】:

  • 不清楚你的问题是什么——你可以推入一个 observableArray——这就是你要问的吗?
  • 我唯一担心该代码的是 onsuccess 不保证在事务完成之前写入数据,因此您可能希望在中执行 getAll避免竞争条件的新事务。见stackoverflow.com/questions/15151242/…

标签: knockout.js indexeddb


【解决方案1】:

你的方法看起来不错。一些改进建议:

  • 在添加之后应该没有理由getAll()。对象存储添加应返回主键,然后您可以使用它来查找该对象。

  • 我自己会使用complete 事件而不是success 事件,因为我发现有时直到那个时候,event.target.result 上的数据实际上才可用。

    李>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 2015-05-29
    • 2013-12-25
    • 1970-01-01
    • 2013-02-04
    • 2014-03-26
    相关资源
    最近更新 更多