This is a viewer only at the moment see the article on how this works.
To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk
This is a preview from the server running through my markdig pipeline
तो क्या एक श्रृंखला बन रहा है में, एक कार्य परियोजना में...... मैं एक आंशिक के लिए स्वचालित- अप अद्यतन की क्षमता जोड़ना चाहता था एक दिए गए समय स्केल पर।
मैं यह Ajjs और HMMX का उपयोग कैसे किया है.
तो मैं यह होना चाहता था
इस बात को मन में रखते हुए मैंने एक छोटा - सा इनकार करनेवाले मॉड्यूल बनाना शुरू कर दिया ।
आप 'on और बंद' को स्वचालित कर सकते हैं और 'यादा' विशेषताओं को सिर्फ HMMMX के साथ काफी नहीं है. उदाहरण के लिए; प्रयोग किया जा रहा है एचएमएमएक्स ट्रिगर्स आप वास्तव में बहुत कुछ कर सकते हैं.
<div id="campaignemail-request-list" hx-get="@Url.Action("List", "CampaignEmailRequest")" hx-trigger="every 30s" hx-swap="innerHTML">
<partial name="_List" model="@Model"/>
</div>
इन्हें धन्यवाद @Kididhikakakh इस बात का इशारा करने के लिए।
यह कोड वास्तव में उपयोग में आता है hx-trigger
स्वचालित अद्यतन सेट करने के लिए. HMMMX गुणों को कॉन्फ़िगर करने के लिए सिर्फ एक आगामी का प्रयोग करें.
यह कैसे जोड़ता है यह उपयोगकर्ता संपर्क ग्राहक पक्ष है, जो एक अनपेक्षितता है. js बहुत अधिक है.
इस के लिए कोड वास्तव में सुंदर कड़ी है, यह दो मुख्य भागों में टूट गया है; एक जेएस मॉड्यूल, घटना हैंडलर्स और एचटीएमएल.
मॉड्यूल एक सरल इनकारक मॉड्यूल है जो आक्वेंशन प्रयोग करता है.js ऑटो- अप अद्यतन की स्थिति का प्रबंधन करने के लिए। यह निवेदन के बीच स्वचालित अद्यतन की स्थिति को याद करने के लिए स्थानीय भंडारण का उपयोग करता है.
यह मुखात स्वीकार करता है:
endpointId
- अद्यतन किया जाने वाला तत्व का आईडीactionUrl
- यूआरएल को तत्व अद्यतन करने के लिए बुलाया जाना हैinitialInterval
- स्वचालित अद्यतन के लिए प्रारंभिक अंतराल (डिफ़ॉल्ट 30 सेकेंड है)हम यह भी देख सकते हैं कि यह कुछ कुंजियों का उपयोग करता है; ये स्थानीय भंडारण के लिए इस्तेमाल किया जाता है ऑटो- अप अद्यतन की स्थिति याद रखने के लिए।
आप देख सकते हैं कि मैं इस्तेमाल करते हैं actionurl
इस अंत बिन्दु विशिष्ट करने के लिए कुंजी के भाग के रूप में.
export function autoUpdateController(endpointId, actionUrl, initialInterval = 30) {
const keyPrefix = `autoUpdate:${actionUrl}`;
const enabledKey = `${keyPrefix}:enabled`;
return {
autoUpdate: false,
interval: initialInterval,
toggleAutoUpdate() {
const el = document.getElementById(endpointId);
if (!el) return;
const url = new URL(window.location.href);
const query = url.searchParams.toString();
const fullUrl = query ? `${actionUrl}?${query}` : actionUrl;
const wasPreviouslyEnabled = localStorage.getItem(enabledKey) === 'true';
if (this.autoUpdate) {
el.setAttribute('hx-trigger', `every ${this.interval}s`);
el.setAttribute('hx-swap', 'innerHTML');
el.setAttribute('hx-get', fullUrl);
el.setAttribute('hx-headers', JSON.stringify({ AutoPoll: 'auto' }));
localStorage.setItem(enabledKey, 'true');
htmx.process(el); // rebind with updated attributes
if (!wasPreviouslyEnabled) {
htmx.ajax('GET', fullUrl, {
target: el,
swap: 'innerHTML',
headers: {AutoPoll: 'auto'}
});
}
} else {
el.removeAttribute('hx-trigger');
el.removeAttribute('hx-get');
el.removeAttribute('hx-swap');
el.removeAttribute('hx-headers');
localStorage.removeItem(enabledKey);
htmx.process(el);
}
},
init() {
this.autoUpdate = localStorage.getItem(enabledKey) === 'true';
this.toggleAutoUpdate();
}
};
}
toggleAutoUpdate()
विधियह विधि HMMX के उपयोग से लक्ष्य एचटीएमएल तत्व के स्वचालित पोलिंग सक्षम या अक्षम करता है.
endpointId
.fullUrl
दिए गए संयोजन के द्वारा actionUrl
वर्तमान पृष्ठ के क्वैरी वाक्यांश के साथ.localStorage
(जब ब्राउज़र सत्रों के बीच याद दिलाया जाता है)this.autoUpdate
है true
( एस., सर्वेिंग सक्षम है):hx-trigger
प्रत्येक को सर्वे करने के लिए interval
सेकण्डhx-swap="innerHTML"
तत्व की सामग्री को बदलने के लिएhx-get
पोलिंग यूआरएल पर इंगित करने के लिएhx-headers
पसंदीदा जोड़ने के लिए "AutoPoll": "auto"
शीर्षिकाlocalStorage
htmx.process(el)
HMSX को नए गुणों को पहचानने के लिएhtmx.ajax()
(होमएक्स घटना पर भरोसा नहीं)this.autoUpdate
है false
( एस. एस.), सर्वेक्षण अक्षम होता है:localStorage
htmx.process(el)
HMMMX बर्ताव को अद्यतन करने के लिए फिर से सेट करेंहम भी यहाँ में एक शाखा है जब पहली बार सक्षम किया गया है ऑटो-पोज को पूरा करने के लिए।
const wasPreviouslyEnabled = localStorage.getItem(enabledKey) === 'true';
if (!wasPreviouslyEnabled) {
htmx.ajax('GET', fullUrl, {
target: el,
swap: 'innerHTML',
headers: {AutoPoll: 'auto'}
});
}
यह एक HMAX निवेदन करता है fullUrl
प्रतिक्रिया के साथ लक्ष्य तत्व को अद्यतन करें. यह उपयोक्ता को दिखाने के लिए उपयोगी है कि स्वचालित अद्यतन क्या होगा जब वे इसे सक्रिय करते हैं.
आप भी हम एक HMAX हेडर को निवेदन के साथ भेज देंगे. यह महत्वपूर्ण है क्योंकि यह हमें निवेदन सर्वर साइड का पता लगाने की अनुमति देता है.
el.setAttribute('hx-headers', JSON.stringify({ AutoPoll: 'auto' }));
headers: {AutoPoll: 'auto'}
मेरे सर्वर के पक्ष में मैं तब इस हेडर को प्रयोग करने के लिए सेट किया जा रहा है
if (Request.Headers.TryGetValue("AutoPoll", out _))
{
var utcDate = DateTime.UtcNow;
var parisTz = TimeZoneInfo.FindSystemTimeZoneById("Europe/Paris");
var parisTime = TimeZoneInfo.ConvertTimeFromUtc(utcDate, parisTz);
var timeStr = parisTime.ToString("yyyy-MM-dd HH:mm:ss");
Response.ShowToast($"Auto Update Last updated: {timeStr} (paris)",true);
return PartialView("_List", requests);
}
आप मैं सिर्फ के साथ हेडर के लिए देख देखेंगे Request.Headers.TryGetValue("AutoPoll", out _)
और अगर यह वहाँ मैं जानता हूँ कि यह एक ऑटो-पोज़ निवेदन है।
मैं तो मौजूदा yme पकड़ (यह एक फ्रांसीसी ग्राहक के लिए है, तो मैं पेरिस समय के लिए परिवर्तन) और समय के साथ एक जाम दिखाने के लिए।
वह ShowToast
विधि एक साधारण विस्तार विधि है जो HMMMX को एक जाम संदेश दिखाने के लिए ट्रिगर करता है.
public static void ShowToast(this HttpResponse response, string message, bool success = true)
{
response.Headers.Append("HX-Trigger", JsonSerializer.Serialize(new
{
showToast = new
{
toast = message,
issuccess =success
}
}));
}
यह तब मेरी HMMAX बॉट अवयव द्वारा पता चला है जो संदेश दिखाता है.
document.body.addEventListener("showToast", (event) => {
const { toast, issuccess } = event.detail || {};
const type = issuccess === false ? 'error' : 'success';
showToast(toast || 'Done!', 3000, type);
});
यह तब मेरे पैरेंट घटक मैं में कॉल करता है यहाँ लिखा है .
यह आपकी मुख्य सूची में, इस मॉड्यूल को हुक करने के लिए बहुत सरल है.
import './auto-actions';
window.autoUpdateController = autoUpdateController; //note this isn't strictly necessary but it makes it easier to use in the HTML
//Where we actually hook it up to Alpine.js
document.addEventListener('alpine:init', () => {
Alpine.data('autoUpdate', function () {
const endpointId = this.$el.dataset.endpointId;
const actionUrl = this.$el.dataset.actionUrl;
const interval = parseInt(this.$el.dataset.interval || '30', 10); // default to 30s
return autoUpdateController(endpointId, actionUrl, interval);
});
});
फिर हम अपिक में विधि कहते हैं. नैट रावर कोड:
इसे छोटा बनाने के लिए...... संभव के रूप में वापस आने वाले कोड बहुत सरल है.
यहाँ पर आप देख सकते हैं कि Ajjs डेटा गुण जिन्हें स्वतः अद्यतन करने के लिए सेट किया जा सकता है.
आप हम लक्ष्य को उपयोग के लिए निवेदन के लिए सेट देखेंगे campaignemail-request-list
तत्व. यह तत्व है जो नई अंतर्वस्तु के साथ अद्यतन किया जाएगा.
यही कारण है कि फिर पृष्ठ में कुछ विस्तार शामिल है।
अब जब चेक किया जाता है तो यह सभी 30 सेकेंड की सूची को स्वचालित अद्यतन करेगा.
<div class=" px-4 py-2 bg-base-100 border border-base-300 rounded-box"
x-data="autoUpdate()"
x-init="init"
x-on:change="toggleAutoUpdate"
data-endpoint-id="campaignemail-request-list"
data-action-url="@Url.Action("List", "CampaignEmailRequest")"
data-interval="30"
>
<label class="flex items-center gap-2">
<input type="checkbox" x-model="autoUpdate" class="toggle toggle-sm" />
<span class="label-text">
Auto update every <span x-text="$data.interval"></span>s
</span>
</label>
</div>
<!-- Voucher List -->
<div id="campaignemail-request-container">
<div
id="campaignemail-request-list">
<partial name="_List" model="@Model"/>
</div>
</div>
और यह बहुत सरल है. एल.एल.एल.एस.) एक सरल स्वचालित स्वचालित अद्यतन घटक बनाने के लिए हम आसानी से उपयोग कर सकते हैं