0

私は自分の js にオブジェクト リテラルを使用しています。以下では、それが「グローバル」変数であることがわかります。それらの 1 つはオブジェクト (theBody) で、これには「bodies」という配列が含まれています。この配列には、svg オブジェクトである複数のオブジェクト (以下の例では 1 つだけ) が含まれています。

bodyColor という特定の変数から塗りつぶし値を割り当てられるようにしたいのですが、変更すると次のようになります。

'fill':'#e59225',

'fill': AvGen.theBody.bodyColor,

Uncaught ReferenceError: theBody is not definedというエラーが表示されます

それはなぜで、オブジェクト プロパティの bodyColor にアクセスするにはどうすればよいですか?

js から:

var AvGen = {

    paper: null,
    theBody: {
        bodies: [
            [0,0,277.9,308.5,{
                type:'path',
                'fill':'#e59225',
                'stroke':'none',
                'stroke-width':'0',
                'fill-opacity':'1',
                'stroke-opacity':'0'
            }],
        ],
        currNr: 1,
        currObj: null,
        bodyColor: '#e59225'
    },

    init: function() {

    }
}
4

2 に答える 2

1

このフィドルDEMOを確認してください。

あなたのエラーは、それを使用している関数の後に AvGen を定義していると思います。私は最初に js 関数を定義し、AvGen の後、あなたと同じエラーが発生しました。

関数コードの前に AvGen ブロックを移動すると、問題が解決しました。

AvGen = {
paper: null,
theBody: {
    bodies: [
        [0,0,277.9,308.5,{
            type:'path',
            'fill':'#e59225',
            'stroke':'none',
            'stroke-width':'0',
            'fill-opacity':'1',
            'stroke-opacity':'0'
        }],
    ],
    currNr: 1,
    currObj: null,
    bodyColor: '#e59225'
},

init: function() {

}
}
$(document).ready(function(){   
    $('#test').attr('style', 'background-color:' + AvGen.theBody.bodyColor);
});
于 2013-09-11T17:17:36.423 に答える
1

すでに定義されていないものを参照しようとしています! を使用しようとしtheBodyていますが、まだ作成されていません。代わりに、次のようなことができます。

var AvGen = {
    paper: null,
    theBody: {
        bodies: [
            [0,0,277.9,308.5,{
                type:'path',
                'fill': null,
                'stroke':'none',
                'stroke-width':'0',
                'fill-opacity':'1',
                'stroke-opacity':'0'
            }],
        ],
        currNr: 1,
        currObj: null,
        bodyColor: '#e59225'
    },

    init: function() {

    }
}

AvGen.theBody.bodies[0][4].fill = AvGen.theBody.bodyColor;

またはさらに良いです。bodyColor完全に抽出します。

var bodyColor = "#e59225";
var AvGen = {
    paper: null,
    theBody: {
        bodies: [
            [0,0,277.9,308.5,{
                type:'path',
                'fill': bodyColor,
                'stroke':'none',
                'stroke-width':'0',
                'fill-opacity':'1',
                'stroke-opacity':'0'
            }],
        ],
        currNr: 1,
        currObj: null,
        bodyColor: bodyColor
    },

    init: function() {

    }
}
于 2013-09-11T17:42:07.227 に答える