如何将嵌套对象属性作为选项传递,而无需传递回调函数?

18 浏览
0 Comments

如何将嵌套对象属性作为选项传递,而无需传递回调函数?

我正在编写一个简单的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);

我知道这是一种选择,但我想知道是否有一种方法可以避免强制用户编写回调函数,如果他们可以传递嵌套对象属性的引用,是否有办法实现?

谢谢!

0