JSON を取得してオブジェクト レイアウト全体を文字列化する際に問題が発生しました。現在、最初のオブジェクト レベルのみを文字列化します。2番目のレベルを取り、それを文字列化するだけで機能します。ただし、オブジェクト全体を試してみると、サブレベルのプロパティはすべて削除されます。これは、コンストラクターからテーブル インスタンスを作成するためのスニペットです。
var doesTableNameExist,
dataBase = {
tables: {}
},
_dataBaseInstance,
_tableInstance = {
TableName: "",
Columns: "",
Rows: "",
RowCount: ""
}
this.TableName = tableName;
this.Columns = columns;
this.Rows = rows;
this.RowCount = 0;
_dataBaseInstance = localStorage.getItem($config.dataBaseName);
if (!!_dataBaseInstance)
{
dataBase = JSON.parse(_dataBaseInstance);
}
doesTableNameExist = dataBase.tables[tableName];
if (!!doesTableNameExist && !forceNew)
{
errorMsg = String.jDBaseFormat("That table name is already used! You cannot have two tables with the name {0}", this.TableName);
console.error(errorMsg);
}
else
{
//create the object table and store it after running JSON against it.
_tableInstance = this;
dataBase.tables[tableName] = _tableInstance;
localStorage.setItem($config.dataBaseName, JSON.stringify(dataBase));
console.log(String.jDBaseFormat("Storing new table '{0}'.", this.TableName));
}
どんな助けでも大歓迎です。stringify プロセスの後、オブジェクトは次のようになります。
オブジェクト ----> テーブル: []; オブジェクトではありません --> テーブル: ---->テーブル インスタンス。
実行時のオブジェクトは次のとおりです。
だから私はオブジェクトがすべて正しいことを知っています。しかし、JSON はオブジェクト プロパティ "tables" 内のすべてを削除します。理由がわかりません。
私もこの方法で試しました:
ええ。私は考えていた。これは、コンストラクター テーブル関数のインスタンスです。私はこれを試しましたが、うまくいきませんでした。私はそれを汎用オブジェクトにし、インスタンスを添付しないと考えました。
_tableInstance = $.extend({}, this);
dataBase.tables[tableName] = _tableInstance;
localStorage.setItem($config.dataBaseName, JSON.stringify(dataBase));
したがって、テーブルに「新しい」コンストラクターを使用する代わりに、オブジェクトを返すだけでよいのではないかと考えています。そのようにして、コンストラクターのインスタンスではなく、通常のオブジェクトを格納していますか? 試してみます。すべての助けをありがとう。