我正在编写一个简单的 jQuery 插件,它将与 JSON 对象/数组交互。我想让该对象数组足够灵活,以便人们可以将自己的对象数组传递给插件函数。我希望用户能够通知插件如何获取 JSON 对象中的两个不同值。例如,假设这是 JSON——
[
{
name: "Baseball Opening Day",
format: "jpg",
urls: {
small: "http://myurl.com/images/small/baseball.jpg",
big: "http://myurl.com/images/big/baseball.jpg"
}
},
// etc.
]
如果插件“知道”它将被传递一个图像对象数组,但是这些图像对象可能以多种方式格式化,我们如何传递一个选项来告诉它在哪里可以找到各种东西?例如,如果我想显示一个标题,我会要求对标题值的引用。这个相当简单:
$("gallery").myPlugin({
references: {
caption: "name"
}
});
在插件内部,一旦我们遍历收集的图像对象,我们就可以得到这样的值:
// Assuming the value passed in is called "options"...
var caption = image[options.references.caption];
这将被解释为与 image.name 相同的 image["name"] 并且可以正常工作。
但是你如何告诉插件如何访问 image.urls.small 呢?你不能这样做:
$("gallery").myPlugin({
references: {
caption: "name",
urlSmall: "urls.small"
}
});
因为它会被解释为 image["urls.small"] 并返回undefined
。
有没有办法通过这个?或者到那时我是否必须使用这样的回调函数:
$("gallery").myPlugin({
references: {
caption: "name",
urlSmall: function () {
return this.urls.small;
}
}
});
// Call it like this inside the plugin image loop
var urlSmall = options.references.urlSmall.call( image );
我知道这是一个选项,但我想知道是否有办法避免强迫用户编写回调函数,如果他们可以传递对嵌套对象属性的引用,而不是不知何故?
谢谢!