0

次のコードについて説明が必要です。

私が思い出したように、Utilities.jsonStringify() は関数を JSON オブジェクトに保存しませんでした。しかし今、彼らはそれを文字列として保存しています ("resultFn":"\nfunction (pageNum, pageSize, filter) {\n return [{a:\"abc1\", b:\"bcd1\"}, {a: \"abc2\", b:\"bcd2\"}, {a:\"abc3\", b:\"bcd3\"}, {a:\"abc4\", b:\"bcd4\"} ];\n})。

また、eval() を使用すると、関数を元に戻すことができます (myFunction のコードを参照してください)。少なくとも些細な例では、私にとってはうまくいきます。

Q: 私の知る限り、関数のシリアル化は標準外です。これは文書化されていないため、API コントラクトとして Google に依存できますか?

私も追加できますか - これにより、多くのコード行を節約できます:)

var fnResults = function(pageNum, pageSize, filter) {
    return [
        { a: "abc1", b: "bcd1" },
        { a: "abc2", b: "bcd2" },
        { a: "abc3", b: "bcd3" },
        { a: "abc4", b: "bcd4" },  
    ];
};

var TestConfig = {
    pagerId: "TestId",
    pageSize: 10,
    widgetWidth: "15cm",
    filterOptions: [],
    resultFn: fnResults,
};


function myFunction() {
    Logger.log(TestConfig.resultFn(1,2,3));
    var s = Utilities.jsonStringify(TestConfig);
    Logger.log(s);
    var o = Utilities.jsonParse(s);
    Logger.log(eval(o.resultFn)(1,2,3));
}
4

1 に答える 1

0

これはバグであり、それに頼るべきではありません。

于 2013-03-01T03:52:16.783 に答える