使用mootools中自定义方法中的Options构造函数中定义的属性

时间:2011-11-13 19:22:26

标签: javascript mootools raphael options

我从Mootools框架开始。因为我希望代码可以重用,所以我试图用类来完成它。

在下面显示的代码中,目的是使用Raphael框架为SVG绘制Map。代码工作正常,但我遇到了Options对象内的属性问题。

var Map = new Class({

Implements : [ Options ],

pathsArr: {},

Options: {
    canvas: {
        container: 'map',
        cheight: 500,
        cwidth: 900,
    },
    attributes: {
        fill: '#006699',
        stroke: '#3899E6',
        'stroke-width': 1,
        'stroke-linejoin': 'round'
    }   
},

initialize: function (pathsArr, options){
    this.setOptions(Options);
    this.pathsArr = paths;
    console.log(this.pathsArr);
},

setCanvas: function(){
    console.log(this.Options.canvas);
    R = Raphael(this.Options.canvas.container, this.Options.canvas.cwidth, this.Options.canvas.cheight);
    return R;
},

drawPaths: function(){
    console.log(this.Options.attributes);
    for (var country in this.pathsArr){
        var shape = R.path(this.pathsArr[country].path);
        var attri = this.Options.attributes;
        console.log(attri);

    }
}

});

好的,就像你可以看到我正在使用console.log来理解这里发生的事情。当我检查行中的属性

console.log(this.Options.attributes);

我在谷歌Chrome控制台中得到了这个

enter image description here

当我认为pathsArr位于Options对象之外时,我需要的东西就像发生的事情一样。

enter image description here

我需要属性属性没有任何反应。就像在这两行中一样。

var attri = this.Options.attributes;
shape.attr(attri);

我不明白为什么如果我这样做,它会得到正确的结果。

console.log(this.Options.attributes.fill);

嗯,就是这样,我坚持这个,我希望有人可以向我解释为什么会这样。谢谢!!

1 个答案:

答案 0 :(得分:3)

Javascript区分大小写。使用setOptions(options)this.options代替Options。只有在引用O mutator时才会出现首都Options,就像Implements: [Options]指令一样。

目前,Options成员无法设置setOptions成员,因为它正在寻找this.options

您只使用永远不会更新的this.Options,这是您的默认选项。在编写this.options时,Options设置为this.setOptions(Options) mutator。

编辑:

另外,在以下代码中:

initialize: function (pathsArr, options){
    this.setOptions(Options);
    this.pathsArr = paths;  // <----- `paths` is undefined