【问题标题】:How to initialize localForage for mobile app如何为移动应用初始化 localForage
【发布时间】:2020-03-03 14:29:12
【问题描述】:

我是移动开发新手,并计划使用纯 HTML 和 jQuery 以及 Onsen UI 构建应用程序。

我读到我们可以使用localForage 作为数据库并有几个问题。

  1. 是否必须为我的应用程序提供数据库名称。如果不是,那么手机中的其他应用程序也可能正在使用localForage。那么所有应用的数据库是否都相同。

  2. 这里的document 表示,应该在每个操作之前调用配置。 那么,如果在页面加载时这样初始化是否可以:

    $(document).ready(function(){
    localforage.config({
    名称:'myApp',
    版本:1.0,
    storeName : '键值对'
    });
    });

或者是否应该在每个操作之前声明(获取、设置、清除等)

  1. 我们如何知道该操作正在触发所需的数据库,因为它没有在操作方法中指定。

  2. 是否必须要有商店名称。

【问题讨论】:

    标签: localforage


    【解决方案1】:
    1. 是否必须为我的应用程序提供数据库名称。如果不是,那么移动设备中的其他应用程序也可能正在使用 localForage。那么所有应用的数据库是否都相同。

    A:是的,不是的。事实上,必须有一个数据库名称。但是,如果您不设置它,则使用默认值“localforage”。

    1. 这里的文档说,配置应该在每个操作之前调用。那么,如果像这样在页面加载时初始化它可以吗...

    A:是的,在$(document).ready(cb) 中初始化完全没问题。事实上,任何时候都可以“初始化”,只要确保它发生在第一次调用任何实际操作(setItem/getItem 等)之前。

    1. 我们如何知道该操作正在触发所需的数据库,因为它没有在操作方法中指定。

    答:localforage 可以有多个实例,而每个实例仅绑定到一个数据库(更准确地说,它绑定到该特定数据库的特定存储)。您知道该操作针对特定数据库,因为这些操作是特定实例的方法。这里没有歧义。

    我个人建议您明确命名您的实例:

    var myAppDb = localforage.createInstance({
      // these are the same options accepted by localforage.config()
      name: 'myApp',
      version : 1.0,
      storeName : 'keyvaluepairs'
    });
    
    myAppDb.setItem('foo', 'bar');
    

    这样您就可以 100% 确定在“myApp”数据库​​上触发了该操作 ;-)

    1. 是否必须要有商店名称。

    再次,是的,不是的。但是等等,听我说,这个有点棘手。

    默认数据库实际上被命名为“localforage”,localforage 中的存储具有未命名的默认存储这个奇怪的内部概念。我个人觉得非常混乱。当您使用 LOCALSTORAGE 作为驱动程序时,它的行为非常古怪。

    因此,经验法则始终是为您的商店命名。把它当作强制性的。如果您在一个数据库中只有一个商店,则可能将其命名为“默认”。听起来比“键值对”更好,你不觉得吗?

    【讨论】:

      【解决方案2】:
       let instance = localforage.createInstance({         
            driver      : localforage.INDEXEDDB, // Force WebSQL; same as using setDriver()
            name        : name,
            version     : 1.0,
            size        : 4980736, // Size of database, in bytes. WebSQL-only for now.
            storeName   : 'YourStoreName', // Should be alphanumeric, with underscores.
            description : 'Your Description'
          });
      
      instance.setItem("key", {"name":"abc"});
      

      **您也可以从 createInstance 设置配置 **

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-04
        • 1970-01-01
        相关资源
        最近更新 更多