diff --git a/context.go b/context.go index dee6bac..52164e5 100644 --- a/context.go +++ b/context.go @@ -291,6 +291,7 @@ func (c *Context) prepareSignalsForPatch() map[string]any { } if sig.changed { updatedSigs[sigID.(string)] = fmt.Sprintf("%v", sig.val) + sig.changed = false } case *computedSignal: sig.recompute() diff --git a/maplibre/js.go b/maplibre/js.go index ee136dc..67952f1 100644 --- a/maplibre/js.go +++ b/maplibre/js.go @@ -233,12 +233,15 @@ func dragendHandlerJS(mapID, markerID string, mk Marker) string { // markerEffectExpr generates a data-effect expression that moves a signal-backed marker // when its signals change. func markerEffectExpr(mapID, markerID string, mk Marker) string { + // Read signals before the guard so Datastar tracks them as dependencies + // even when the map/marker hasn't loaded yet on first evaluation. return fmt.Sprintf( - `var m=window.__via_maps&&window.__via_maps[%s];`+ + `var lng=$%s,lat=$%s;`+ + `var m=window.__via_maps&&window.__via_maps[%s];`+ `if(m&&m._via_markers[%s]){`+ - `m._via_markers[%s].setLngLat([$%s,$%s])}`, - jsonStr(mapID), jsonStr(markerID), jsonStr(markerID), + `m._via_markers[%s].setLngLat([lng,lat])}`, mk.LngSignal.ID(), mk.LatSignal.ID(), + jsonStr(mapID), jsonStr(markerID), jsonStr(markerID), ) }