【发布时间】:2021-04-07 19:48:49
【问题描述】:
我正在使用一些 3rd 方 jquery 插件,在某些情况下,我需要单独初始化插件,以便为它们提供一些额外的参数,如上所示。
我使用撇号资产加载例如 swiper 库:
// lib/modules/apostrophe-assets/index.js
scripts: [
...
{ name: 'vendor/swiper-bundle.min' },
...
所以脚本会被加载到带有撇号资产链的正文中,这很好。我在我的 widget.html 中使用 script 标签分别初始化页面上的每个 swiper 插件并添加一些额外的参数,管理员在小部件设置中选择。
// lib/modules/swiper-widgets/views/widget.html
<div class="swiper-container {{ data.widget._id }}">
<div class="swiper-wrapper">
{% for swiper in data.widget.swipers %}
<div class="swiper-slide">
{{ apos.area(swiper, 'swiper', {
edit: false,
widgets: {
'card': {
size: 'one-half',
sizesAttr: '(max-width:600px) 50vw, 40vw',
noHeight: true,
focalPoint: true
},
'texts': {},
'video': {}
}
}) }}
</div>
{% endfor %}
</div>
</div>
<script type="text/javascript">
window.addEventListener('load', function () {
var swiper{{ data.widget._id }} = new Swiper('.{{ data.widget._id }}', {
loop: {{ data.widget.loop }},
speed: {{ data.widget.speed }},
{% if data.widget.autoplay %}
autoplay: {
delay: {{ data.widget.delay }},
disableOnInteraction: {{ data.widget.disableOnInteraction }},
},
{% endif %}
});
});
</script>
没问题。
但是您知道我需要将我的 var 包装在 window.addEventListener('load', function () 中,以等待正文中的脚本加载完毕。
这对管理员来说并不是很满意,因为如果他们更改了这个小部件的一些参数,swiper 插件就会停止工作,管理员需要手动重新加载页面。
我现在发现与我之前的问题有关,您已经在撇号开放博物馆here 中集成了 swiper。
var imageSwiper = new Swiper($widget.find('[data-slideshow]')[0], {
loop: true,
autoHeight: true,
slideToClickedSlide: false,
threshold: 10,
effect: 'fade',
fadeEffect: {
crossFade: true
},
pagination: {
clickable: false
}
});
我想要一些类似的东西,但管理员应该能够选择像“循环”这样的参数。所以我需要将这些参数与我拥有的字段进行映射:
// lib/modules/swiper-widgets/index.js
...
{
name: 'loop',
label: 'Loop Swiper',
type: 'boolean',
help: 'Activate loop for swiper (default: No)',
def: false
},
{
name: 'speed',
label: 'Swipe Speed',
type: 'range',
help: 'Choose speed of transition between swpipes (format: ms, default: 300)',
min: 100,
max: 2000,
step: 100,
def: 300
},
...
【问题讨论】:
标签: apostrophe-cms