0

我将 Ember 与 Electron 结合使用。

由于用户可以为应用程序定义一些设置,我认为将设置数据存储在本地存储中是一个不错的主意。

为此,我使用 ember-local-storage 适配器。

存储、删除和显示这些数据就像一个魅力但是这些设置应该在某些功能中使用,所以我想把它们从本地存储中取出。我期望一个数组或 JSON 对象,甚至与本地存储中显示的格式相同。但我只收到一个巨大的抽象对象?!

这就是我想要存储的(例如):

{"identifier":"identifier1","bid":"6653ggd245","name":"test1"}
{"identifier":"identifier2","bid":"kkhd7765vv","name":"test2"}

这是本地存储(开发工具)中显示的内容:

{"buttons":
  {"records":
    {"i7lvj":{"id":"i7lvj","identifier":"identifier1","bid":"6653ggd245","name":"test1"},"i80vm":{"id":"i80vm","identifier":"identifier2","bid":"kkhd7765vv","name":"test2"}
  }}}

这就是我尝试访问数据的方式:

this.get('store').findAll('buttons').then(function(SavButtons){

      console.log(SavButtons);
 });// gett all stored buttons


this.get('store').findRecord('buttons','i7lvj').then(function(SavButtons){

      console.log(SavButtons.data);
 });// get specific button -> works 

该数据是生成参数数组以用于 API 请求的 Promises 的基础。我该怎么做才能使这个结构成为可重用的结构?例如:0:{record1} 1:{record2}

或者是否有更简单/更好的方法来存储应用程序关闭后用户所做的设置,也许我错过了一些东西。

非常感谢!

4

1 回答 1

0

首先,您确定您的模型称为“按钮”吗?你可能需要使用

this.get('store').findAll('button')

此外,您从商店收到的是Ember.ArrayProxy或其他从 Ember.Array 扩展的类。它有处理元素的特殊方法,你应该尝试那些

其次,我不认为 Ember Data 对设置有好处。我发现创建自定义“设置”服务并使用它要容易得多。让我分享一下我在 node-webkit 中使用的实现。它不会“按原样”为您工作,但您可能会有所了解。我支持文件和本地存储(用于 nw-app 的文件和用于 web-app 的存储),如果您只需要本地存储,您可以简化_persist_restore方法。

对其工作原理的简要说明:它是具有修改的init,setsetProperties方法的基本服务。因此,当您调用控制器时this.get('settings').set('key', vale);,设置将保存在本地存储中。当服务初始化时,设置将从存储加载到内存。一个限制:您必须显式调用设置服务的setsetProperties方法,如果您将使用类似的东西this.set('settings.key', value);,设置将不会被持久化。独立服务优于 ember 数据的主要优点是您无需为不同类型的设置创建模型,您可以保存任何简单的值或 POJO。

于 2017-01-15T16:35:52.190 回答