1

アプリケーションに次のような JSON オブジェクトがあります。

var pages = {
    home: {
        title: "Home",
        description: "The home page",
        file: "home.html",
        url: "/home"
    },
    blog: {
        title: "Blog",
        description: "Our blog",
        file: "blog.html",
        url: "/blog"
    }
};

プロパティfileurlは常にそれぞれのキーから派生できるため、現在、コードで上記のオブジェクトを次のように定義しています。

var pages = {
    home: {
        title: "Home",
        description: "The home page"
    },
    blog: {
        title: "Blog",
        description: "Our blog"
    }
};

$.each(pages, function(key, value) {
    value.file = key + ".html";
    value.url = "/" + key;
}

ただし、fileurlは派生属性であるため、それらをオブジェクトに追加するのは冗長に思えます。しかし、キーではなく各ページの値を渡すため、それをオブジェクトにも追加する必要があり、これも冗長になります。このような:

var pages = {
    home: {
        title: "Home",
        description: "The home page"
    },
    blog: {
        title: "Blog",
        description: "Our blog"
    }
};

$.each(pages, function(key, value) {
    value.jsonKey = key;
}

今、私は3つの異なるアプローチを持っていますが、どれもあまり好きではありません. これはかなり一般的な問題だと思いますが、どのようにアプローチしますか? また、派生属性が複数回使用される場合はどうなるでしょうか?

4

2 に答える 2

1

プロパティを持つオブジェクトとしてではなく、オブジェクトのリストとしてページを保存することを検討する必要があります。これは論理的により一貫しているように見え、冗長性の問題を解決します。

var pages = [
    {
        key: 'home'
        title: "Home",
        description: "The home page",
    },
    {
        key: 'blog',
        title: "Blog",
        description: "Our blog",
    }
];

さらに。ページ オブジェクトのクラスを作成し、派生プロパティを計算するメソッドを使用できます (繰り返しアクセスするとコストがかかると思われる場合に備えて、必要に応じてそれらをキャッシュします。ただし、単純な文字列連結に対してそれを行うのはやり過ぎのように思えます)。

于 2011-04-27T20:48:38.243 に答える
0

同じデータを 1 つのフォーム (キー) に既に持っているのに、なぜ別のフォームに同じデータを保存したいのですか。私の意見では、特定のページのとを取得したいときはいつでもから簡単に取得できる
ため、これらのいずれにも行かないでください。fileurlpage.key

于 2011-04-27T20:41:53.893 に答える