我正在尝试将 Turbolinks 添加到我的 Rails 6 应用程序中(我参加聚会迟到了)并且我遇到了 TailwindCSS 和 Mapbox GL JS 的显示问题。
如果我在带有地图的页面上开始我的旅程(新标签或刷新页面),那么在我访问期间一切都会按预期进行(我可以反复离开并返回带有地图的页面,并且每次一切正常预期的)。我什至可以访问带有其他Mapbox 实例的页面并且这些实例正确显示(我正在慢慢地从script
每个页面上的孤立标签转换到 StimulusJS,这让我有几个提供 Mapbox 的控制器,例如 mapcity_controller 和 mapstreet_controller - 我没有不认为这是问题的一部分,但我不想留下任何机会)。
但是,如果我在没有地图的其他页面(新选项卡或刷新页面)上开始我的旅程,然后导航到带有 Mapbox 的页面,则fixed
andw-*
样式不起作用。如果我滚动页面,地图会随着内容向上流动,并且地图不会填满w-2/3
它应该填满的整个空间。
<div data-controller="mapbox" class="flex flex-col-reverse flex-wrap mt-10 md:flex-row">
<div class="h-full p-2 mt-64 overflow-scroll md:mt-0 lg:mt-0 md:w-1/2 lg:w-1/3">
CONTENT
</div>
<div class="md:w-1/2 lg:w-2/3">
<div id="map" class="fixed w-full h-64 md:w-1/2 lg:w-2/3 md:bottom-0 md:right-0 md:h-full"></div>
</div>
</div>
我认为它可能是父md:w-1/2 lg:w-2/3
容器 div,但删除它根本不会改变行为:
<div data-controller="mapbox" class="flex flex-col-reverse flex-wrap mt-10 md:flex-row">
<div class="h-full p-2 mt-64 overflow-scroll md:mt-0 lg:mt-0 md:w-1/2 lg:w-1/3">
CONTENT
</div>
<div id="map" class="fixed w-full h-64 md:w-1/2 lg:w-2/3 md:bottom-0 md:right-0 md:h-full"></div>
</div>
如果我从等式中删除 Mapbox,则在任一访问场景中一切都会按预期工作(无论该页面是否是我第一次访问,我总是有一个全宽、非滚动的右窗格):
<div class="flex flex-col-reverse flex-wrap mt-10 md:flex-row">
<div class="h-full p-2 mt-64 overflow-scroll md:mt-0 lg:mt-0 md:w-1/2 lg:w-1/3">
LOTS OF MULTI-LINE CONTENT TO CAUSE SCROLLING
</div>
<div class="fixed w-full h-64 bg-blue-300 md:w-1/2 lg:w-2/3 md:bottom-0 md:right-0 md:h-full">OTHER CONTENT</div>
</div>
我猜我的 StimulusJS 控制器的某些东西不能与 Turbolinks 一起正常工作。我已经删除了所有额外的代码(设置缩放级别、添加源和图层等),但问题仍然存在。我试过使用connect
as well as initialize
,结果相同。
import { Controller } from 'stimulus'
import mapboxgl from 'mapbox-gl'
export default class extends Controller {
connect () {
mapboxgl.accessToken = "my-access-token"
this.map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/satellite-streets-v11',
center: [0,0],
zoom: 2,
minZoom: 1
})
}
disconnect () {
this.map.remove()
this.map = undefined
}
}
以防万一,这是我的index.js
文件:
import { Application } from 'stimulus'
import { definitionsFromContext } from 'stimulus/webpack-helpers'
const application = Application.start()
const context = require.context('controllers', true, /_controller\.js$/)
application.load(definitionsFromContext(context))
这是我的packs/application.js
文件:
require('@rails/ujs').start()
require('turbolinks').start()
require('stylesheets/application.scss')
require('stylesheets/custom.scss')
require('src')
import 'controllers'
该application.scss
文件包含:
@import "tailwindcss/base";
@import "tailwindcss/components";
@import "tailwindcss/utilities";
没有任何自定义样式custom.scss
适用于地图或其容器 div。