0

javascript オブジェクトのツリーがあります。これを「ファミリー」と呼びましょう。これには、任意の数の特定のオブジェクト (「親」) を含めることができ、それぞれに任意の数の「子」オブジェクトを含めることができます。この構造のレベル数は既知であり、ツリーの各レベルには次のオブジェクトのみが含まれます。ある特定のタイプ。

すべてのオブジェクトにはデータとメソッドがあります。

構造化データをデータベースに保存したい。JSON.stringify() は、データの抽出と構造の保存を完璧に行います。しかし、どうやってオブジェクトに戻るのでしょうか? メソッドなしでオブジェクトを再作成するため、JSON.parse() は失敗します。

この場合、どうすればよいですか?文字列からオブジェクトを再作成するための独自の関数を作成する必要がありますか? それとも、どうにかしてメソッドと一緒にデータを保存する必要がありますか (もったいないようです)。

私が構造を知っているので、オブジェクトを指して「それは親オブジェクトです」と伝え、メソッドを取得する可能性があると非常に便利です。その時、私はそれを簡単に循環させることができました。しかし、その方法がわかりません。また、コンストラクターがいくつかの値をデフォルトの値に設定できるのではないかと心配しています。

オブジェクト コンストラクターは次のようになります。

function lines()
{
    this.lines = [];
    this.height = 0.5*theMargin;

    this.addLine = addLine;

    function addLine(newline)
    {
        this.lines.push(newline);
        this.height += newline.height;
    }
}

function aLine()
{
    this.dots = [];
    this.height = 0;
    this.length = indent;

    this.insertDot = insertDot;

    function insertDot(pos,newDot)
    {
        this.dots.splice(pos,0,newDot);
        this.length += newDot.length;
        this.height = Math.max(this.height,newDot.height);
        if (this.length > maxLineLength)
        { "I will not go into details here" }
    }
}

次に、次のようにします。

var a = new lines();
var testline = new aLine();
var testdot = new aDot();

testdot.height = 10;
testdot.length = 15;
testline.insertDot(0,testdot);
a.addLine(testline);
a.addLine(testline);

次に、長さと高さに関するデータを保存します。そして、どのドットがどの行に属しているかを知るための構造。

そのデータをウェブサーバーに送信します。これらは、使用されているアプローチを理解するための重要な行だと思います。

post = "name=" + name + "&tab=" + JSON.stringify(file);
req.open("POST", "saveFile.php", true);
req.send(post);

保存されたファイルには、私が望んでいたもの、つまり構造とデータが正確に保存されます。しかし、それを再びオブジェクトにする方法がわかりません。JSON.stringify() メソッドの使用を主張しているわけではありません。メソッドを繰り返し保存せずにコンテンツを保存できるアプローチをお勧めします。

4

2 に答える 2

1

なんらかの理由でオブジェクト全体を保存するという考えに本当に夢中になっている場合は、関数で呼び出されたときに関数のコード本体を文字列の形式で本質的に返す toString() メソッドを使用することをお勧めします。

var obj = { func: function() { alert('hello!'); };
for(var key in obj)
    if (typeof obj[key] === 'function')
       alert(obj[key].toString());

json データに加えて、この情報をシリアル化して保存するためのコードを追加するだけです。

そうは言っても、オブジェクトの状態を保存してアプリケーションに再ロードするだけで十分です。

編集: オブジェクトのクライアント側の再構築

免責事項: 私は PHP の専門家ではないので、実際のコーディング例を見つけるのはあなた次第ですが、万能の Google の力を備えたものがあると確信しています。

シリアル化/逆シリアル化クラスを使用して、データをシリアル化してオブジェクトに戻すだけです。したがって、擬似コードのセクションが問題の特定のページの php ファイルであると想像してください。

<?php
 <html>
      <head>
          <script type="text/javascript">
              var model = /* Use serializing class on your server-side object */;
              //Now you just need to build a function into your objects that is much like a constructor that can receive this model and rebuild the object

              function rebuildObject(yourObject, jsonModel) {
                  //assign first property
                  //assign second etc...
              }
           </script>
      </head>
      <body>
      </body>
</html>
?>

基本的に、クライアント側でアクセスできるように、json データをスクリプト タグ内のページにテンプレート化しています。JavaScriptインタープリターは、jsonをコードで使用できる実際のjsオブジェクトに自動的に変換するため、問題はありません。

于 2013-04-09T14:09:29.043 に答える