我从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控制台中得到了这个
当我认为pathsArr
位于Options
对象之外时,我需要的东西就像发生的事情一样。
我需要属性属性没有任何反应。就像在这两行中一样。
var attri = this.Options.attributes;
shape.attr(attri);
我不明白为什么如果我这样做,它会得到正确的结果。
console.log(this.Options.attributes.fill);
嗯,就是这样,我坚持这个,我希望有人可以向我解释为什么会这样。谢谢!!
答案 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