如何将嵌套对象属性作为选项传递,而无需传递回调函数?
如何将嵌套对象属性作为选项传递,而无需传递回调函数?
我正在编写一个简单的jQuery插件,用于与JSON对象/数组进行交互。我希望使该对象数组足够灵活,以便用户可以将自己的对象数组传递给插件函数。我希望用户能够告知插件如何获取JSON对象中的两个不同值。例如,假设这是JSON数据 -
[ { name: "棒球开幕日", 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" } });
在插件内部,一旦我们循环遍历收集到的图像对象,我们可以通过以下方式获取该值:
// 假设传递的值被称为"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; } } }); // 在插件的图像循环内这样调用 var urlSmall = options.references.urlSmall.call(image);
我知道这是一种选择,但我想知道是否有一种方法可以避免强制用户编写回调函数,如果他们可以传递嵌套对象属性的引用,是否有办法实现?
谢谢!