0

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));    

したがって、テーブルに「新しい」コンストラクターを使用する代わりに、オブジェクトを返すだけでよいのではないかと考えています。そのようにして、コンストラクターのインスタンスではなく、通常のオブジェクトを格納していますか? 試してみます。すべての助けをありがとう。

4

0 に答える 0