EstreUI is a "Rimwork" (Runnable Frame) designed to bridge the gap between classic web development and modern native-like web applications. It provides a structured, mobile-first environment for developers familiar with jQuery, ASP, PHP, or JSP, as well as native app developers looking to transition to the web.
ํ๊ตญ์ด ๋ฌธ์ (Korean Documentation)
EstreUI is not just a library, nor a full-blown framework in the traditional sense. It is a Rimworkโa "Runnable Frame" that provides the essential rim (structure) and lifecycle management for your application, allowing you to fill in the content with your preferred tools (like jQuery).
- Classic Web Developers: If you are comfortable with jQuery, ASP, PHP, or JSP but want to build modern, single-page applications (SPA) with mobile-app-like experiences, EstreUI is for you.
- Native App Developers: If you are moving from Android or iOS development to the web, you will find EstreUI's lifecycle events (
onCreate,onShow,onPauseequivalent) and intent system very familiar.
- MVC Pattern: Structured separation of concerns.
- Lifecycle Management: Native-like page lifecycle (
onBring,onShow,onHide, etc.). - Native-like UI: Smooth transitions, semi-stack-based navigation, and mobile-optimized touch interactions.
- jQuery 4.0 Support: Fully compatible with the latest jQuery. Can also be used with lighter alternatives like Cash (experimental).
- Hybrid App Ready: Designed to work seamlessly with WVCA4EUI (Flutter-based wrapper) for deploying to Google Play and App Store.
- PWA Support: Ready for Progressive Web App deployment, including Windows Store support (requires SSL).
- Browsers: Chromium 92+, Safari 15+ (iOS 15+).
- Recommendation: iOS 16+ is strongly recommended due to severe CSS limitations in iOS 15.
EstreUI is typically installed by cloning the repository or forking it. To update, you can pull from the upstream repository.
You can also start with an example web app that includes a basic implementation:
Example Web App 1 (preview) / (Github)
Estre UI Demo Application
serviceLoader.html: Service Worker Loader (handles updates before app launch).scripts/: Core libraries and logic.estreUi.js: Main framework code.estreU0EE0Z.js: Estre Common library.main.js: Application entry point and configuration.
styles/: CSS files for the framework and your app.index.html: The main entry point (The "Rim").fixedTop.html,fixedBottom.html,mainMenu.html,staticDoc.html,instantDoc.html,managedOverlay.html: Exported sections for layout.
- JCODD: A JSON-alternative format and utility library for robust data handling.
- Doctre.js: DOM manipulation and document management helper.
- Modernism.js: Polyfills and support for modern JavaScript features.
- Alienise.js: Bridge for communication between heterogeneous systems (e.g., Web <-> Native).
- estreU0EE0Z.js: Common utilities and base classes for EstreUI.
When starting a new project, you should customize the following:
- Metadata: Update
<title>,<meta name="description">, and Open Graph (OG) tags inindex.html. - Icons & Manifest: Replace
favicon.ico, app icons inimages/and/vectors/, and updatewebmanifest.json. - Layout: Modify
fixedTop.htmlfor your header andmainMenu.htmlfor navigation. - Theme: Update
styles/main.cssto match your brand colors. - Main Script: Update
scripts/main.js. - PWA: Configure the service worker loader in
serviceLoader.html(update messages and colors). UpdateserviceWorker.jsto include your app's files and version.
EstreUI divides content layer areas as follows. Items below cover items above:
- MainSections(StaticDoc): UI area paired with top/bottom fixed UI. PID starts with
&m. - FooterSections(FixedBottom): Bottom fixed rootbar UI area. PID starts with
&f. (Currently unused) - MenuSections(MainMenu): Left/Right sliding drawer menu area. PID starts with
&u. - HeaderSections(FixedTop): Top fixed appbar UI area. PID starts with
&h. - BlindedSections(InstantDoc): UI page area covering fixed UI. PID starts with
&b. - OverlaySections(ManagedOverlay): Topmost overlay area. PID starts with
&o.
EstreUI organizes content hierarchically:
- Component(section): Top-level page. A functional grouping of pages in the application configuration. In staticDoc, it matches the tabs in fixedBottom. The default component for staticDoc has the id
home. PID starts with the=prefix. - Container: Container page. Represents a major feature area of the screen. The default container has the id
root. PID starts with the#prefix. - Article: Actual page content. Represents content at the screen or element level. The default article has the id
main. PID starts with the@prefix.- Multi-Article Support: You can display multiple articles simultaneously (e.g., split-screen for tablets), though this has some layout limitations.
EstreUI classifies pages as follows:
- Static: Static page. Elements are not deleted and remain after registration during Estre UI initialization. Cannot be closed with closePage(). PID starts with
$s. (Can be omitted when calling) - Instant: Instant page. Elements are deleted after registration during Estre UI initialization and loaded when bringPage() is called separately. Can be closed with closePage(). PID starts with
$i. (Can be omitted when calling)- Multi instance: Can display the same page implementation with different content simultaneously. PID includes an instance origin id prefixed with
^at the end. (** Currently unimplemented.)
- Multi instance: Can display the same page implementation with different content simultaneously. PID includes an instance origin id prefixed with
Navigation is handled via PIDs, similar to deep links or routes.
- Format:
$s&m=component#container#articleor defined aliases. - Example:
customPageManager.bringPage("dashboard")orpageManager.bringPage("*dashboard")orpageManager.bringPage("&b=main#dashboard"). - You can check the list of registered PIDs via
pageManager.pages.
EstreUI pages have a distinct lifecycle, similar to Android Activities:
- onBring: Page is being prepared. Since the Active Struct hasn't been called yet, this is a good place for element creation tasks involving handles.
- onOpen: Page is opening (transition start). Called only once.
- onShow: Page is fully visible.
- onHide: Page is hidden (covered by another page or closed).
- onClose: Page is closed. Called only once.
- onRelease: Page resources are released.
-
onBack: Called when back navigation is triggered. Return
trueto cancel the default action. -
onReload: Called when page reload is triggered. Return
trueto cancel the default action (which is closing and reopening the page). -
onIntentUpdated: Called when the page receives new data (Intent) while already active.
-
onApplied: Executed after
apply()is called for data binding.
- Handle: The DOM element or UI controller. In
handler, usehandlefor lifecycle methods, otherwisethis.handle. - Handler: The logic class (
EstrePageHandler) managing the page. Accessed viahandle.handler. - Use
handle.component,handle.containerto access parent handles. - Use
component.containers,container.articlesto access child handles. - For other access, use
estreUi.mainSections,blindedSectionsto access handles in other sections. Refer to the source code for details. - You can access the page handle from any element object via
element.pageHandle. - Tip: In browser developer tools, select a component/container/article element and type
$0.pageHandlein the console to access it.
- Intent: A data object passed between pages. Accessed via
handle.intentorhandler.intent. - Intent Data: Accessed via
handle.intent.dataorhandler.intentData. - Intent Action: You can define actions to be performed at specific lifecycle points. Refer to the source code for details.
- Timing: For
onBring,onOpen,onShow, actions are performed after the callback. ForonHide,onClose,onRelease, they are performed before the callback.
- Timing: For
- Active Struct: A comprehensive system for binding intent data and initializing dynamic elements. It handles
data-bind-*attributes,local-style,solid-point,handles, andpassive-links. It is executed during initialization (specifically aroundonBring) and automatically wheneverintentDatais modified. It can also be executed manually if needed. - Apply: When applying multiple changes at once, use
handle.apply(data)to preventapplyActiveStruce()from running for each change. It executes once after all changes are complete, preventing overhead.
- Handles are for reusable components within an Article page.
- Handles matching the UIS (UI specifier) in the HTML structure are initialized after onBring.
- Includes
EstreUnifiedCalendarHandle,EstreDedicatedCalanderHandle, etc. Refer to the default registered classes in theEstreHandleclass inestreUi.js.
- You can register and use your own handles before Estre UI initialization. Refer to the implementation of the
EstreHandleclass inestreUi.js.
- Reusable implementations that perform specific actions as needed are called handlers.
- Mainly initialized and used during page start callbacks.
- Includes
EstreSwipeHandler,EstreDraggableHandler, etc. Refer to the default registered classes under the// handlerscomment inestreUi.js.
- There is no specific format for handler implementation, so feel free to implement them as needed.
Parts of the layout like the header (fixedTop) or static content (staticDoc) are loaded from separate HTML files to keep index.html clean.
Content written directly in index.html will be placed after the content of each file.
If needed (e.g., for local execution), you can remove data-exported="1" or the attribute entirely to write directly in index.html without AJAX loading.
- Scroll Modes:
vfv_scroll: Scroll with inset added forfixedTopandfixedBottom.sv_scroll: Standard scroll without inset.txv_scroll,bxv_scroll: Scroll with only top or bottom inset added.
- Article Modes:
fwvs: Full Width Vertical Scroll.limit_on_screen: Limits page width to mobile levels.fixed_height,full_height,max_height: Height limit modes. Refer toestreUiCore2.css.
- Flex Presets:
line_block(row),inline_block,lines_block(column). - Inset Utilities:
inset_on_margin,inset_on_padding,inset_on_gapfor consistent spacing.
Native browser alerts are blocking and ugly. EstreUI provides non-blocking alternatives:
estreAlert(message): Replaces defaultalert.estreConfirm(message, callback): Replaces defaultconfirm.estrePrompt(message, callback): Replaces defaultprompt.- Legacy calls: You can still use
classicAlertif absolutely necessary. estreToast*: Bottom-sheet style dialogs. Provides the same interface as alert/confirm/prompt and supports custom dialogs. Refer to source code.note(message): Android Toast-like message output.wait(),go(),stedy(): Show/hide global loading indicators.
- Async Storage: Prototype implementation for asynchronous storage matching Local/Session Storage.
- Native Storage: Uses native app storage when running in WVCA4EUI.
- Account/Device Storage: Backend-synced data (account/device specific). Requires custom API implementation to link with async storage.
- Codded Storage: Storage implementation that automatically handles JCODD serialization/deserialization.
uis: Collection of UI specifier aliases.eds: Collection of Element dataset name aliases.
EstreUI supports scoped styling within Article page elements using the <local-style> tag. This feature is processed as part of the Active Struct system.
- Usage: Place a
<local-style>tag inside a page element. - Path Replacement: Use
##within the style content to represent the path to the current element. This allows you to write styles that are scoped to that specific element hierarchy. - Mechanism: The framework automatically converts
<local-style>into a standard<style>tag, replacing##with the actual CSS selector path to the element.
- Issue: iOS 15+ (especially 15) has strict memory limits for web apps. Large CSS files can cause the app to crash or fail to load.
- Solution:
- Separate critical CSS for the splash screen.
- Load the rest of the CSS (including heavy fonts) using Lazy Loading (
<meta link="lazy" ...>). - Use
deferfor script loading. - Implement HTML in exported section files (like
staticDoc.html).
Demonstrates a full-featured education app with complex data binding, multiple page containers, and dynamic content.
- Key Pattern: Extensive use of
AppPagesProviderto map PIDs to specific handlers. - Application link: Mango Class
A Braille viewer utility.
- Key Pattern: File processing and simple UI structure. Shows how to handle file inputs and process data locally.
- Application link: GMDG
- Github repository: https://github.com/Esterkxz/GMDG
- index.html: The skeleton.
- AppPagesProvider: The router configuration.
- EstrePageHandler: The controller for each page.
- SSR Hybrid: You can still use Server-Side Rendering for the initial load (
staticDoc), but since it loads only once at first run, you must handle page content and navigation via AJAX/Fetch to maintain the SPA experience. - AJAX: Replace form submissions and page reloads with
fetchcalls and EstreUI's page transitions.
- WVCA4EUI: Use this Flutter-based wrapper to package your EstreUI app for app stores.
- Features: Provides a bridge for native features, handles PWA caching, and manages the webview lifecycle.
- Bridge Handler: Allows JavaScript to call Flutter code and vice-versa.
EstreUI๋ ํด๋์ ์น ๊ฐ๋ฐ๊ณผ ํ๋์ ์ธ ๋ค์ดํฐ๋ธ ์คํ์ผ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ๊ฒฉ์ฐจ๋ฅผ ํด์ํ๊ธฐ ์ํด ์ค๊ณ๋ "Rimwork" (Runnable Frame)์ ๋๋ค. jQuery, ASP, PHP, JSP์ ์ต์ํ ๊ฐ๋ฐ์๋ฟ๋ง ์๋๋ผ ์น์ผ๋ก ์ ํํ๋ ค๋ ๋ค์ดํฐ๋ธ ์ฑ ๊ฐ๋ฐ์์๊ฒ ๊ตฌ์กฐํ๋ ๋ชจ๋ฐ์ผ ์ฐ์ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค.
EstreUI๋ ๋จ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋, ์ ํต์ ์ธ ์๋ฏธ์ ์์ ํ ํ๋ ์์ํฌ๋ ์๋๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์์ ์ธ Rim(๊ตฌ์กฐ)๊ณผ ๋ผ์ดํ์ฌ์ดํด ๊ด๋ฆฌ๋ฅผ ์ ๊ณตํ๋ Rimwork(์คํ ๊ฐ๋ฅํ ํ๋ ์)๋ก, ๊ทธ ์์ ๋ด์ฉ์ ์ฌ๋ฌ๋ถ์ด ์ ํธํ๋ ๋๊ตฌ(์: jQuery)๋ก ์ฑ์ธ ์ ์์ต๋๋ค.
- ํด๋์ ์น ๊ฐ๋ฐ์: jQuery, ASP, PHP, JSP์ ์ต์ํ์ง๋ง ๋ชจ๋ฐ์ผ ์ฑ๊ณผ ๊ฐ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ํ๋์ ์ธ SPA(Single Page Application)๋ฅผ ๊ตฌ์ถํ๊ณ ์ถ์ ๋ถ.
- ๋ค์ดํฐ๋ธ ์ฑ ๊ฐ๋ฐ์: Android๋ iOS ๊ฐ๋ฐ์์ ์น์ผ๋ก ์ ํํ๋ ค๋ ๋ถ๋ค์๊ฒ EstreUI์ ๋ผ์ดํ์ฌ์ดํด ์ด๋ฒคํธ(
onCreate,onShow,onPause๋ฑ๊ณผ ์ ์ฌ)์ ์ธํ ํธ ์์คํ ์ ๋งค์ฐ ์น์ํ ๊ฒ์ ๋๋ค.
- MVC ํจํด: ๊ด์ฌ์ฌ์ ๊ตฌ์กฐ์ ๋ถ๋ฆฌ.
- ๋ผ์ดํ์ฌ์ดํด ๊ด๋ฆฌ: ๋ค์ดํฐ๋ธ ์ฑ๊ณผ ์ ์ฌํ ํ์ด์ง ๋ผ์ดํ์ฌ์ดํด (
onBring,onShow,onHide๋ฑ). - ๋ค์ดํฐ๋ธ ์คํ์ผ UI: ๋ถ๋๋ฌ์ด ์ ํ, ์ธ๋ฏธ ์คํ(Semi-Stack) ๊ธฐ๋ฐ ๋ค๋น๊ฒ์ด์ , ๋ชจ๋ฐ์ผ์ ์ต์ ํ๋ ํฐ์น ์ธํฐ๋์ .
- jQuery 4.0 ์ง์: ์ต์ jQuery์ ์๋ฒฝ ํธํ๋ฉ๋๋ค. ๋ ๊ฐ๋ฒผ์ด ๋์์ธ Cash์๋ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค(์คํ์ ).
- ํ์ด๋ธ๋ฆฌ๋ ์ฑ ์ง์: Flutter ๊ธฐ๋ฐ์ WVCA4EUI ๋ํผ์ ์ฐ๋ํ์ฌ Google Play ๋ฐ App Store์ ๋ฐฐํฌํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค.
- PWA ์ง์: Windows Store ๋ฑ๋ก์ ํฌํจํ ํ๋ก๊ทธ๋ ์๋ธ ์น ์ฑ ๋ฐฐํฌ๋ฅผ ์ง์ํฉ๋๋ค(SSL ํ์).
- ๋ธ๋ผ์ฐ์ : Chromium 92+, Safari 15+ (iOS 15+).
- ๊ถ์ฅ ์ฌํญ: iOS 15์ CSS ์ ํ์ผ๋ก ์ธํด iOS 16 ์ด์์ ๊ฐ๋ ฅํ ๊ถ์ฅํฉ๋๋ค.
EstreUI๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ณต์ (clone)ํ๊ฑฐ๋ ํฌํฌ(fork)ํ์ฌ ์ค์นํฉ๋๋ค. ์ ๋ฐ์ดํธ๋ฅผ ์ํด์๋ ์ ์คํธ๋ฆผ(upstream) ๋ฆฌํฌ์งํ ๋ฆฌ์์ ํ(pull)์ ์ํํ ์ ์์ต๋๋ค.
์๋ ๊ธฐ์ด ๊ตฌํ์ด ํฌํจ๋ ์์ ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
์์ ์น ์ฑ 1 (preview) / (Github)
Estre UI ๋ฐ๋ชจ ์ ํ๋ฆฌ์ผ์ด์
serviceLoader.html: ์๋น์ค ์์ปค ๋ก๋ (์ฑ ์คํ ์ ์ ๋ฐ์ดํธ ์งํ).scripts/: ํต์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ๋ก์ง.estreUi.js: ๋ฉ์ธ ํ๋ ์์ํฌ ์ฝ๋.estreU0EE0Z.js: Estre Common ๋ผ์ด๋ธ๋ฌ๋ฆฌ.main.js: ์ ํ๋ฆฌ์ผ์ด์ ์ง์ ์ ๋ฐ ์ค์ .
styles/: ํ๋ ์์ํฌ ๋ฐ ์ฑ์ ์ํ CSS ํ์ผ.index.html: ๋ฉ์ธ ์ง์ ์ ("Rim").fixedTop.html,fixedBottom.html,mainMenu.html,staticDoc.html,instantDoc.html,managedOverlay.html: ๋ ์ด์์์ ์ํ ๋ด๋ณด๋ด์ง ์น์ ๋ค.
- JCODD: ๊ฐ๋ ฅํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํ JSON ๋์ฒด ํฌ๋งท ๋ฐ ์ ํธ๋ฆฌํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
- Doctre.js: DOM ์กฐ์ ๋ฐ ๋ฌธ์ ๊ด๋ฆฌ ํฌํผ.
- Modernism.js: ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฅ ํด๋ฆฌํ ๋ฐ ์ง์.
- Alienise.js: ์ด์ง์ ์ธ ์์คํ ๊ฐ(์: Web <-> Native)์ ํต์ ์ ์ํ ๋ธ๋ฆฟ์ง.
- estreU0EE0Z.js: EstreUI๋ฅผ ์ํ ๊ณตํต ์ ํธ๋ฆฌํฐ ๋ฐ ๊ธฐ๋ณธ ํด๋์ค.
์ ํ๋ก์ ํธ๋ฅผ ์์ํ ๋ ๋ค์ ์ฌํญ๋ค์ ์ปค์คํฐ๋ง์ด์งํด์ผ ํฉ๋๋ค:
- ๋ฉํ๋ฐ์ดํฐ:
index.html์<title>,<meta name="description">, Open Graph (OG) ํ๊ทธ ์ ๋ฐ์ดํธ. - ์์ด์ฝ ๋ฐ ๋งค๋ํ์คํธ:
favicon.ico,images/๋ฐ/vectors/ํด๋์ ์ฑ ์์ด์ฝ ๊ต์ฒด ๋ฐwebmanifest.json์ ๋ฐ์ดํธ. - ๋ ์ด์์: ํค๋๋ฅผ ์ํ
fixedTop.html๊ณผ ๋ค๋น๊ฒ์ด์ ์ ์ํmainMenu.html์์ . - ํ
๋ง: ๋ธ๋๋ ์ปฌ๋ฌ์ ๋ง์ถฐ
styles/main.css์์ . - ๋ฉ์ธ ์คํฌ๋ฆฝํธ:
scripts/main.js์์ . - PWA:
serviceLoader.html์์ ์๋น์ค ์์ปค ๋ก๋ ์ค์ (๋ฉ์์ง ๋ฐ ์์) ์ ๋ฐ์ดํธ ๋ฐserviceWorker.js์ ๊ตฌ์ฑ ํ์ผ ๋ชฉ๋ก ๋ฐ ๋ฒ์ ์์ .
EstreUI๋ ์ฝํ ์ธ ๋ ์ด์ด ์์ญ์ด ๋ค์๊ณผ ๊ฐ์ด ๋๋ฉ๋๋ค. ์๋์ ์๋ ํญ๋ชฉ์ด ์์ ์๋ ํญ๋ชฉ์ ๋ฎ์ต๋๋ค:
- MainSections(StaticDoc): ์/ํ๋จ ๊ณ ์ UI์ ์ธํธ๋๋ UI ์์ญ. PID๊ฐ
&m์ผ๋ก ์์๋ฉ๋๋ค. - FooterSections(FixedBottom): ํ๋จ ๊ณ ์ rootbar UI ์์ญ. PID๊ฐ
&f์ผ๋ก ์์๋ฉ๋๋ค. (ํ์ฌ๋ ์ฌ์ฉ๋์ง ์์) - MenuSections(MainMenu): ์ข/์ฐ์ธก ์ฌ๋ผ์ด๋ฉ ๋๋ก์ด ๋ฉ๋ด ์์ญ. PID๊ฐ
&u์ผ๋ก ์์๋ฉ๋๋ค. - HeaderSections(FixedTop): ์๋จ ๊ณ ์ appbar UI ์์ญ. PID๊ฐ
&h์ผ๋ก ์์๋ฉ๋๋ค. - BlindedSections(InstantDoc): ๊ณ ์ UI๋ฅผ ๋ฎ๋ UI ํ์ด์ง ์์ญ. PID๊ฐ
&b์ผ๋ก ์์๋ฉ๋๋ค. - OverlaySections(ManagedOverlay): ์ต์๋จ ์ค๋ฒ๋ ์ด ์์ญ. PID๊ฐ
&o์ผ๋ก ์์๋ฉ๋๋ค.
EstreUI๋ ์ฝํ ์ธ ๋ฅผ ๊ณ์ธต์ ์ผ๋ก ๊ตฌ์ฑํฉ๋๋ค:
- Component(section): ์ต์์ ํ์ด์ง. ์ ํ๋ฆฌ์ผ์ด์
๊ตฌ์ฑ ์ ๊ธฐ๋ฅ์ ์ผ๋ก ๋ถ๋ฆฌ๋ ํ์ด์ง ๋ฌถ์ ๋จ์. staticDoc์ ๊ฒฝ์ฐ fixedBottom์ ํญ๊ณผ ๋งค์นญ. staticDoc์ ๊ธฐ๋ณธ ์ปดํฌ๋ํธ๋
homeid๋ฅผ ๊ฐ์ง. PID์์=ํ๋ฆฌํฝ์ค๋ก ์์ํฉ๋๋ค. - Container: ์ปจํ
์ด๋ ํ์ด์ง. ์ฃผ๋ก ํ๋ฉด ๋จ์์ ์ฃผ์ ๊ธฐ๋ฅ ์์ญ์ ๋ํ๋ด๋ฉฐ, ๊ธฐ๋ณธ ์ปจํ
์ด๋๋
rootid๋ฅผ ๊ฐ์ง. PID์์#ํ๋ฆฌํฝ์ค๋ก ์์ํฉ๋๋ค. - Article: ์ค์ ํ์ด์ง ์ฝํ
์ธ . ์ฃผ๋ก ํ๋ฉด ๋๋ ์์ ๋จ์์ ์ปจํ
์ธ ๋ฅผ ๋ํ๋ด๋ฉฐ, ๊ธฐ๋ณธ ์ํฐํด์
mainid๋ฅผ ๊ฐ์ง. PID์์@ํ๋ฆฌํฝ์ค๋ก ์์ํฉ๋๋ค.- ๋ค์ค ์ํฐํด ์ง์: ํ๋ธ๋ฆฟ์ ๋ถํ ํ๋ฉด์ฒ๋ผ ์ฌ๋ฌ ์ํฐํด์ ๋์์ ํ์ํ ์ ์์ผ๋, ๋ ์ด์์์ ์ผ๋ถ ์ ํ์ด ์์ต๋๋ค.
EstreUI๋ ํ์ด์ง๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ๋ถํฉ๋๋ค:
- Static: ์ ์ ํ์ด์ง. Estre UI ์ด๊ธฐํ ์ค ํ์ด์ง ๋ฑ๋ก ์ ์์๊ฐ ์ญ์ ๋์ง ์๊ณ ์ ์ง๋๋ฉฐ, closePage()๋ก ๋ซ์ ์ ์์ต๋๋ค. PID๊ฐ
$s๋ก ์์ํฉ๋๋ค. (ํธ์ถ ์ ์๋ต ๊ฐ๋ฅ) - Instant: ์ธ์คํดํธ ํ์ด์ง. Estre UI ์ด๊ธฐํ ์ค ํ์ด์ง ๋ฑ๋ก ํ ์์๊ฐ ์ญ์ ๋๋ฉฐ, ๋ณ๋๋ก bringPage()ํธ์ถ์ ํ ๋ ๋ก๋๋ฉ๋๋ค. closePage()๋ก ๋ซ์ ์ ์์ต๋๋ค. PID๊ฐ
$i๋ก ์์ํฉ๋๋ค. (ํธ์ถ ์ ์๋ต ๊ฐ๋ฅ)- Multi instance: ๊ฐ์ ํ์ด์ง ๊ตฌํ์ ๋ค๋ฅธ ๋ด์ฉ์ผ๋ก ๋์์ ํ์ํ ์ ์์ต๋๋ค. PID ๋์
^๋ฅผ ํ๋ฆฌํฝ์ค๋ก ํ๋ instance origin id๊ฐ ํฌํจ๋ฉ๋๋ค. (** ํ์ฌ ๋ฏธ๊ตฌํ์ ๋๋ค.)
- Multi instance: ๊ฐ์ ํ์ด์ง ๊ตฌํ์ ๋ค๋ฅธ ๋ด์ฉ์ผ๋ก ๋์์ ํ์ํ ์ ์์ต๋๋ค. PID ๋์
๋ค๋น๊ฒ์ด์ ์ ๋ฅ๋งํฌ๋ ๋ผ์ฐํธ์ ์ ์ฌํ PID๋ฅผ ํตํด ์ฒ๋ฆฌ๋ฉ๋๋ค.
- ํ์:
$s&m=component#container#article๋๋ ์ ์๋ ๋ณ์นญ(alias). - ์์:
customPageManager.bringPage("dashboard")๋๋pageManager.bringPage("*dashboard")๋๋pageManager.bringPage("&b=main#dashboard"). - ๋ฑ๋ก๋ PID ๋ชฉ๋ก์
pageManager.pages๋ฅผ ํตํด ํ์ธ ํ ์ ์์ต๋๋ค.
EstreUI ํ์ด์ง๋ Android Activity์ ์ ์ฌํ ๋๋ ทํ ๋ผ์ดํ์ฌ์ดํด์ ๊ฐ์ง๋๋ค:
- onBring: ํ์ด์ง๊ฐ ์ค๋น๋๋ ์ค์ ๋๋ค. Active struct๊ฐ ํธ์ถ๋๊ธฐ ์ด์ ์ด๋ฏ๋ก ๊ฐ์ข handle ๋ฑ์ ํฌํจํ๋ element ์์ฑ ์์ ์ ํ ์ ์์ต๋๋ค.
- onOpen: ํ์ด์ง๊ฐ ์ด๋ฆฌ๋ ์ค์ ๋๋ค (์ ํ ์์). 1ํ๋ง ํธ์ถ๋ฉ๋๋ค.
- onShow: ํ์ด์ง๊ฐ ์์ ํ ๋ณด์ ๋๋ค.
- onHide: ํ์ด์ง๊ฐ ์จ๊ฒจ์ก์ต๋๋ค (๋ค๋ฅธ ํ์ด์ง์ ๊ฐ๋ ค์ง๊ฑฐ๋ ๋ซํ).
- onClose: ํ์ด์ง๊ฐ ๋ซํ์ต๋๋ค. 1ํ๋ง ํธ์ถ๋ฉ๋๋ค.
- onRelease: ํ์ด์ง ๋ฆฌ์์ค๊ฐ ํด์ ๋ฉ๋๋ค.
-
onBack: Back navigation์ด ํธ์ถ๋ ๋ ์คํ๋๋ฉฐ, true๋ฅผ ๋ฐํํ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ์๋์ด ์ทจ์๋ฉ๋๋ค.
-
onReload: ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํ๋ ค๊ณ ํ ๋ ํธ์ถ๋ฉ๋๋ค. true๋ฅผ ๋ฐํํ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ์๋์ด ์ทจ์๋ฉ๋๋ค. ๊ธฐ๋ณธ ์๋์ ํด๋น ํ์ด์ง๋ฅผ ๋ซ์ ํ ๋ค์ ์ด์ด์ฃผ๋ ๊ฒ์ ๋๋ค.
-
onIntentUpdated: ์ด๋ฏธ ํ์ฑํ๋ ํ์ด์ง๊ฐ ์๋ก์ด ๋ฐ์ดํฐ(Intent)๋ฅผ ๋ฐ์ ๋ ํธ์ถ๋ฉ๋๋ค.
-
onApplied: ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์ํด
apply()๊ฐ ํธ์ถ๋ ๋ ์์ ํ ์คํ๋ฉ๋๋ค.
- Handle: DOM ์์ ๋๋ UI ์ปจํธ๋กค๋ฌ์
๋๋ค.
handler์ ์๋ ๋ผ์ดํ์ธ์ดํด์handle๊ทธ ์ธ์๋this.handle๋ก ์ ๊ทผํฉ๋๋ค. - Handler: ํ์ด์ง๋ฅผ ๊ด๋ฆฌํ๋ ๋ก์ง ํด๋์ค(
EstrePageHandler)์ ๋๋ค.handle.handler๋ก ์ ๊ทผํฉ๋๋ค. handle.component,handle.container๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํญ๋ชฉ์ ํธ๋ค์ ์ ๊ทผํ ์ ์์ต๋๋ค.component.containers,container.articles๋ฅผ ์ฌ์ฉํ์ฌ ํ์ ํญ๋ชฉ์ ํธ๋ค์ ์ ๊ทผํ ์ ์์ต๋๋ค.- ๊ทธ ์ธ ์ ๊ทผ์ด ํ์ํ ๊ฒฝ์ฐ
estreUi์mainSections,blindedSections๋ฑ์ ํตํ์ฌ ๋ค๋ฅธ ์น์ ์ ํธ๋ค์ ์ ๊ทผํ ์ ์์ต๋๋ค. ์์ธํ ํญ๋ชฉ์ ์์ค ๊ตฌํ์ ์ฐธ๊ณ ํ์ธ์. - ๊ฐ ํ์ด์ง์ ์๋ฆฌ๋จผํธ ๊ฐ์ฒด์์ ์ ๊ทผ์ด ํ์ํ ๊ฒฝ์ฐ
element.pageHandle๋ก ์ ๊ทผํ ์ ์์ต๋๋ค. - ํนํ ๋ธ๋ผ์ฐ์ ์ developer tools์ console๋ก ์ ๊ทผํ๋ ค๋ ๊ฒฝ์ฐ ์์ ํญ์์ component/container/article ์์๋ฅผ ์ ํํ ํ
$0.pageHandle๋ฅผ ์ ๋ ฅํ์ฌ ์ ๊ทผํ ์ ์์ต๋๋ค.
- Intent: ํ์ด์ง ๊ฐ์ ์ ๋ฌ๋๋ ๋ฐ์ดํฐ ๊ฐ์ฒด์
๋๋ค.
handle.intent๋handler.intent๋ก ์ ๊ทผํ ์ ์์ต๋๋ค. - Intent Data:
handle.intent.data๋handler.intentData๋ก ์ ๊ทผํ ์ ์์ต๋๋ค. - Intent Action: ๊ฐ ๋ผ์ดํ์ธ์ดํด์ ํด๋นํ๋ ์์ ์ ์ํ๋๋ ๋์์ ์ง์ ํ ์ ์์ต๋๋ค. ์์ธํ ์ฌํญ์ ์์ค ๊ตฌํ์ ์ฐธ๊ณ ํ์ธ์.
- ์คํ ์์ : onBring, onOpen, onShow์ ๊ฒฝ์ฐ ๋ผ์ดํ์ธ์ดํด์ ์ฝ๋ฐฑ์ด ์คํ ๋ ์ดํ์ ์ํ๋๋ฉฐ, onHide, onClose, onRelease์ ๊ฒฝ์ฐ ๋ผ์ดํ์ธ์ดํด์ ์ฝ๋ฐฑ์ด ์คํ ๋๊ธฐ ์ด์ ์ ์ํ๋ฉ๋๋ค.
- Active Struct:
data-bind-*์์ฑ์ ํตํ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ๋ฟ๋ง ์๋๋ผlocal-style,solid-point,handles,passive-links๋ฑ ๋์ ์์๋ฅผ ์ด๊ธฐํํ๋ ํฌ๊ด์ ์ธ ์์คํ ์ ๋๋ค. ์ด๊ธฐํ ์์ (์ฃผ๋กonBring์ ํ)๊ณผintentData๊ฐ ์์ ๋ ๋ ์๋์ผ๋ก ์คํ๋์ด UI๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค. ํ์์ ๋ฐ๋ผ ์๋์ผ๋ก ์คํํ ์๋ ์์ต๋๋ค. - Apply: ๋ค์์ ๋ณ๊ฒฝ์ฌํญ์ด ํ๋ฒ์ ์ ์ฉ๋๋ ๊ฒฝ์ฐ
handle.apply(data)๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ ๋ณ๊ฒฝ์ด ๋ฐ์ํ ๋ ๋ง๋คapplyActiveStruce()๊ฐ ์คํ ๋๋๊ฒ์ ๋ฐฉ์งํ๊ณ ๋ณ๊ฒฝ์ด ์๋ฃ ๋ ํ์ ํ๋ฒ๋ง ์คํ๋๋๋ก ํ์ฌ ์ค๋ฒํค๋๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
- Article ํ์ด์ง ๋ด ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ตฌ์ฑ ์์๋ฅผ ์ํ ๊ฒ์ด ํธ๋ค์ ๋๋ค.
- HTML ์คํธ๋ญ์ฒ ๋ด UIS(UI spceifier)์ ๋ฐ๋ผ ๋งค์นญ๋๋ ํธ๋ค์ด onBring ์ดํ ์์ ์ ์ด๊ธฐํ๋ฉ๋๋ค.
EstreUnifiedCalendarHandle,EstreDedicatedCalanderHandle๋ฑ์ ๊ธฐ๋ณธ ์ ๊ณต ํธ๋ค์ด ์์ต๋๋ค. ์์ธํ ํญ๋ชฉ์estreUi.js์EstreHandleํด๋์ค์ ๊ธฐ๋ณธ ๋ฑ๋ก๋ ํด๋์ค๋ค์ ์ฐธ์กฐํ์ธ์.
- Estre UI์ ์ด๊ธฐํ ์ ์ ์ง์ ๊ตฌํํ ํธ๋ค์ ๋ฑ๋กํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์์ธํ ์ฌํญ์
estreUi.js์EstreHandleํด๋์ค์ ๊ตฌํ์ ์ฐธ๊ณ ํ์ธ์.
- ํ์์ ๋ฐ๋ผ ํน์ ์๋์ ์ํํ๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ตฌํ์ ํธ๋ค๋ฌ๋ผ๊ณ ์นญํฉ๋๋ค.
- ์ฃผ๋ก ํ์ด์ง ์์ ์ฝ๋ฐฑ ์ค์ ์ด๊ธฐํํ์ฌ ์ฌ์ฉํฉ๋๋ค.
EstreSwipeHandler,EstreDraggableHandler๋ฑ์ ๊ธฐ๋ณธ ์ ๊ณต ํธ๋ค๋ฌ๊ฐ ์์ต๋๋ค. ์์ธํ ํญ๋ชฉ์estreUi.js์// handlers์ฃผ์ ์๋์ ๊ธฐ๋ณธ ๋ฑ๋ก๋ ํด๋์ค๋ค์ ์ฐธ์กฐํ์ธ์.
- ํธ๋ค๋ฌ์ ๊ตฌํ์ ํ์์ด ๋ฐ๋ก ์์ผ๋ฏ๋ก ์์ ๋กญ๊ฒ ๊ตฌํํ์ฌ ์ฌ์ฉํ์๊ธฐ ๋ฐ๋๋๋ค.
ํค๋(fixedTop)๋ ์ ์ ์ฝํ
์ธ (staticDoc)์ ๊ฐ์ ๋ ์ด์์ ๋ถ๋ถ์ index.html์ ๊น๋ํ๊ฒ ์ ์งํ๊ธฐ ์ํด ๋ณ๋์ HTML ํ์ผ์์ ๋ก๋๋ฉ๋๋ค.
index.html์ ์ง์ ์์ฑํ ์ฌํญ์ ๊ฐ ํ์ผ์ ๋ด์ฉ์ ๋ค์ ์์นํ๊ฒ ๋ฉ๋๋ค.
ํ์์ ๋ฐ๋ผ(๋ก์ปฌ ์คํ์ด ํ์ํ ๊ฒฝ์ฐ ๋ฑ) data-exported="1"์ 1์ ์ง์ฐ๊ฑฐ๋ ์์ฑ์ ์ ๊ฑฐํ์ฌ ๋ณ๋ ํ์ผ์ AJAX ๋ก๋๋ฅผ ํ์ง ์๊ณ index.html์ ์ง์ ์์ฑํ๋ ๋ฐฉ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์คํฌ๋กค ๋ฐฉ์:
vfv_scroll: fixedTop ๋ฐ fixedBottom์ ํฌ๊ธฐ๋งํผ inset์ด ์ถ๊ฐ๋๋ ์คํฌ๋กค.sv_scroll: inset์ด ์๋ ํ์ค ์คํฌ๋กค.txv_scroll,bxv_scroll: ์๋จ ๋๋ ํ๋จ inset ๋ง ์ถ๊ฐ๋๋ ์คํฌ๋กค.
- ์ํฐํด ๋ชจ๋:
fwvs: Full Width Vertical Scroll (์ ์ฒด ๋๋น ์ธ๋ก ์คํฌ๋กค).limit_on_screen: ํ์ด์ง ํญ์ ๋ชจ๋ฐ์ผ ์์ค์ผ๋ก ์ ํ.fixed_height,full_height,max_height: ๋์ด ์ ํ ๋ชจ๋ ์ค์ .estreUiCore2.css๊ตฌํ ์ฐธ์กฐ.
- Flex ํ๋ฆฌ์
:
line_block(ํ),inline_block,lines_block(์ด). - Inset ์ ํธ๋ฆฌํฐ: ์ผ๊ด๋ ๊ฐ๊ฒฉ์ ์ํ
inset_on_margin,inset_on_padding,inset_on_gap.
๊ธฐ๋ณธ ๋ธ๋ผ์ฐ์ ๊ฒฝ๊ณ ์ฐฝ์ ์ฐจ๋จ์ ์ด๊ณ ๋ฏธ๋ คํ์ง ์์ต๋๋ค. EstreUI๋ ๋น์ฐจ๋จ ๋์์ ์ ๊ณตํฉ๋๋ค:
estreAlert(message): ๊ธฐ๋ณธalertํธ์ถ์ ์ด ํจ์๋ก ๋์ฒด๋ฉ๋๋ค.estreConfirm(message, callback): ๊ธฐ๋ณธconfirmํธ์ถ์ ์ด ํจ์๋ก ๋์ฒด๋ฉ๋๋ค.estrePrompt(message, callback): ๊ธฐ๋ณธpromptํธ์ถ์ ์ด ํจ์๋ก ๋์ฒด๋ฉ๋๋ค.- ๋ ๊ฑฐ์ ํธ์ถ: ๊ผญ ํ์ํ ๊ฒฝ์ฐ
classicAlert๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. estreToast*: ํ๋ฉด ํ๋จ์ ๋ถ์ฐฉ๋ ํํ์ ๋ค์ด์ผ๋ก๊ทธ ํ์ ๋ํ ์ ๊ณต๋ฉ๋๋ค. alert, confirm, prompt์ ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ฉฐ ์ปค์คํ ๋ค์ด์ผ๋ก๊ทธ ๋ํ ์ง์ํฉ๋๋ค. ์์ธํ ์ฌํญ์ ์์ค ๊ตฌํ์ ์ฐธ๊ณ ํ์ธ์.note(message): ์๋๋ก์ด๋์ Toast์ ๋น์ทํ ํ์์ ๋ฉ์์ง ์ถ๋ ฅ์ ์ ๊ณตํฉ๋๋ค.wait(),go(),stedy(): ์ ์ญ ๋ก๋ฉ ์ธ๋์ผ์ดํฐ๋ฅผ ํ์ํ๊ฑฐ๋ ์จ๊น๋๋ค.
- Async Storage: Local/Session Storage๊ตฌํ๊ณผ ์ผ์นํ๋ ๋น๋๊ธฐ ์คํ ๋ฆฌ์ง์ฉ prototype ๊ตฌํ์ ๋๋ค.
- Native Storage: WVCA4EUI์์ ์คํ ์ ๋ค์ดํฐ๋ธ ์ฑ ์ ์ฅ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- Account/Device Storage: ๋ฐฑ์๋์ ์ฐ๋๋ ๋ฐ์ดํฐ (๊ณ์ ๋ณ/๊ธฐ๊ธฐ๋ณ ์ ์ฅ์). ์ด ๋ถ๋ถ์ ์์ฒด API์ ์ฐ๋ํ์ฌ async storage๋ฅผ ์ง์ ๊ตฌํํด์ผ ํฉ๋๋ค.
- Codded Storage: JCODD ์ง๋ ฌํ/์ญ์ง๋ ฌํ๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ ์คํ ๋ฆฌ์ง ๊ตฌํ์ ๋๋ค.
uis: UI specifier alias ๋ชจ์.eds: Element dataset name alias ๋ชจ์.
EstreUI๋ Article ํ์ด์ง ์์ ๋ด์์ <local-style> ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ฝํ๋ ์คํ์ผ๋ง์ ์ง์ํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ Active Struct ์์คํ
์ ์ผ๋ถ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
- ์ฌ์ฉ๋ฒ: ํ์ด์ง ์์ ๋ด๋ถ์
<local-style>ํ๊ทธ๋ฅผ ๋ฐฐ์นํฉ๋๋ค. - ๊ฒฝ๋ก ์นํ: ์คํ์ผ ๋ด์ฉ ๋ด์์
##์ ์ฌ์ฉํ๋ฉด ํด๋น ์ง์ ๊น์ง์ ๊ฒฝ๋ก๋ก ์นํ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ํน์ ์์ ๊ณ์ธต์ ํ์ ๋ ์คํ์ผ์ ์์ฑํ ์ ์์ต๋๋ค. - ์๋ ์๋ฆฌ: ํ๋ ์์ํฌ๋ ์๋์ผ๋ก
<local-style>์ ํ์ค<style>ํ๊ทธ๋ก ๋ณํํ๋ฉฐ,##์ ํด๋น ์์์ ์ค์ CSS ์ ํ์ ๊ฒฝ๋ก๋ก ์นํํฉ๋๋ค.
- ์ด์: iOS 15+(ํนํ 15)๋ ์น ์ฑ์ ๋ํ ์๊ฒฉํ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ด ์์ต๋๋ค. ํฐ CSS ํ์ผ์ ์ฑ ์ถฉ๋์ด๋ ๋ก๋ ์คํจ๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค.
- ํด๊ฒฐ์ฑ
:
- ์คํ๋์ ํ๋ฉด์ ํ์ํ CSS๋ง ๋ถ๋ฆฌํ์ธ์.
- ๋๋จธ์ง CSS(๋ฌด๊ฑฐ์ด ํฐํธ ํฌํจ)๋ Lazy Loading (
<meta link="lazy" ...>)์ ์ฌ์ฉํ์ธ์. - ์คํฌ๋ฆฝํธ ๋ก๋ฉ ์
defer์์ฑ์ ์ฌ์ฉํ์ธ์. - exported section html (
staticDoc.html๋ฑ) ํ์ผ์ html์ ๊ตฌํํ์ฌ ์ฌ์ฉํ์ธ์.
๋ณต์กํ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ, ๋ค์ค ํ์ด์ง ์ปจํ ์ด๋, ๋์ ์ฝํ ์ธ ๋ฅผ ๊ฐ์ถ ๊ต์ก์ฉ ์ฑ ์์์ ๋๋ค.
- ํต์ฌ ํจํด:
AppPagesProvider๋ฅผ ์ฌ์ฉํ์ฌ PID๋ฅผ ํน์ ํธ๋ค๋ฌ์ ๋งคํํ๋ ๊ด๋ฒ์ํ ์ฌ์ฉ. - Application link: ๋ง๊ณ ํด๋์ค
์ ์ ๋ทฐ์ด ์ ํธ๋ฆฌํฐ์ ๋๋ค.
- ํต์ฌ ํจํด: ํ์ผ ์ฒ๋ฆฌ ๋ฐ ๊ฐ๋จํ UI ๊ตฌ์กฐ. ๋ก์ปฌ์์ ํ์ผ ์ ๋ ฅ์ ์ฒ๋ฆฌํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
- Application link: ๊ด๋งน๋๊ฐ
- Github repository: https://github.com/Esterkxz/GMDG
- index.html: ๋ผ๋(Skeleton).
- AppPagesProvider: ๋ผ์ฐํฐ ์ค์ .
- EstrePageHandler: ๊ฐ ํ์ด์ง์ ์ปจํธ๋กค๋ฌ.
- SSR ํ์ด๋ธ๋ฆฌ๋: ์ด๊ธฐ ๋ก๋(
staticDoc)์๋ ์ฌ์ ํ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ ์ฌ์ฉํ ์ ์์ง๋ง, ์ฒ์ ์คํ ์ ์ต์ด 1ํ๋ง ๋ก๋๋๋ฏ๋ก SPA ๊ฒฝํ์ ์ ์งํ๋ ค๋ฉด ๊ฐ ํ์ด์ง์ ์ปจํ ์ธ ๋ฐ ๋ค๋น๊ฒ์ด์ ์ AJAX/Fetch๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. - AJAX: ํผ ์ ์ถ๊ณผ ํ์ด์ง ์๋ก๊ณ ์นจ์
fetchํธ์ถ๊ณผ EstreUI์ ํ์ด์ง ์ ํ์ผ๋ก ๋์ฒดํ์ธ์.
- WVCA4EUI: ์ด Flutter ๊ธฐ๋ฐ ๋ํผ๋ฅผ ์ฌ์ฉํ์ฌ EstreUI ์ฑ์ ์ฑ ์คํ ์ด์ฉ์ผ๋ก ํจํค์งํ์ธ์.
- ๊ธฐ๋ฅ: ๋ค์ดํฐ๋ธ ๊ธฐ๋ฅ์ ์ํ ๋ธ๋ฆฟ์ง๋ฅผ ์ ๊ณตํ๊ณ , PWA ์บ์ฑ์ ์ฒ๋ฆฌํ๋ฉฐ, ์น๋ทฐ ๋ผ์ดํ์ฌ์ดํด์ ๊ด๋ฆฌํฉ๋๋ค.
- Bridge Handler: ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ Flutter ์ฝ๋๋ฅผ ํธ์ถํ๊ฑฐ๋ ๊ทธ ๋ฐ๋๋ก ํธ์ถํ ์ ์๊ฒ ํด์ค๋๋ค.