CtMobile
Это фреймворк для мобильной разработки, который поддерживает различные формы переключения страниц, переходы между страницами, значения страниц и уведомления. Он подходит для разработки одностраничных приложений (SPA), гибридных приложений и приложений на Cordova.
Вдохновение для разработки
В начале работы над гибридными приложениями компания выбрала комбинацию jQueryMobile + Cordova для создания гибридных приложений. При использовании jQueryMobile я столкнулся со многими проблемами, такими как управление классами и катавади. Органичное сочетание — первоначальная идея заключается в том, что если каждая частичная страница на стороне браузера и её класс управления могут быть такими же активными, как Android, то возникает вдохновение. Реализация CtMobile полностью соответствует активности Android.
Три концепции
У CtMoble есть три важные идеи: Page, Router, BorasdCast.
Модель разработки
Режим запуска страницы (page)
Эффект перехода между страницами (page transition effect)
Переключение между страницами поддерживает множество эффектов:
Другие функции
Установка
$ npm install ctmobile --save
<script src="https://unpkg.com/ctmobile@^2/umd/ctmobile.min.js"></script>
Документация по API docs
Быстрый старт
<div ct-data-role="page" id="index"></div>
Элемент с атрибутом ct-data-role = «page» представляет базовую страницу, а атрибут id однозначно идентифицирует эту страницу. Следует отметить, что элемент с атрибутом ct-data-role = "page" должен быть телом. Дочерний элемент, не может быть элементом любого уровня. Также обратите внимание, что HTML содержит хотя бы одну структуру страницы для представления первого отображаемого содержимого страницы.
import CtMobile from "ctmobile";
const Router = {
index: {
url: "/static/html/index.html",
component: import(/* webpackChunkName: "index" */ "../pages/index"),
},
info: {
url: "/static/html/info.html",
component: import(/* webpackChunkName: "info" */ "../pages/info"),
},
about: {
url: "/static/html/about.html",
component: import(/* webpackChunkName: "about" */ "../pages/about"),
},
};
const App = CtMobile.CtMobileFactory.create({
supportCordova: false,
linkCaptureReload: false,
``` **3. router**
Для детального объяснения параметров, пожалуйста, обратитесь к разделу «Конфигурация свойств» (#Конфигурация атрибутов).
**3. Router**
В коде для инициализации приложения необходимо настроить опцию маршрутизатора. Маршрутизатор — это объект. Ключ объекта должен соответствовать значению атрибута id в базовой структуре. Значение представляет собой объект, а также URL и компонент двух атрибутов.
* URL
Представляет адрес HTML-фрагмента, на который ссылается эта страница. Фрагмент является базовой структурой страницы.
* Components
Возвращает неполярный объект, представляющий класс логической обработки этой страницы. Объект, возвращаемый в обещании, должен быть подклассом унаследованного веб-класса.
При использовании WebPack для разработки его можно определить как:
```js
component: import(/* webpackChunkName: "about" */ "../pages/about")
Свойства компонента можно оставить неустановленными. Если свойства компонента не заданы, фреймворк будет считать, что загруженная страница URL только отображается и не обрабатывается логически.
4. Написание страницы, соответствующей странице
import CtMobile from 'ctmobile';
export default class extends CtMobile.Page {
constructor(ctmobile, id) {
super(ctmobile, id);
}
/**
* @override
*/
pageCreate(){
console.log('pageCreate');
}
/**
* @override
*/
pageShow() {
console.log('pageShow');
}
/**
* @override
*/
pageBeforeDestory(){
console.log('pageBeforeDestory');
}
}
Написание класса, наследуемого от класса страницы, для завершения определения страницы, где конструктор имеет два параметра, ctmobile и ID, где ctmobile представляет весь экземпляр приложения, а ID представляет значение атрибута id в основной организации страницы. Где pageCreate, pageShow и pageBeforeDestory — функции жизненного цикла страницы. Для получения дополнительной информации о функциях жизненного цикла см. раздел «Жизненный цикл страницы» (#Жизненный цикл 9-страницы).
5. Переход на новую страницу
Перейти на новую страницу можно двумя способами:
<a ct-pageId="info">Перейти на информационную страницу</a>
Используйте свойство CT-PAGEID в теге для перехода на новую страницу, где значением CT-PAGEID является значение идентификатора в базовой организации страницы.
this.getCtMobile().startPage("/static/html/info.html?pageId=info");
Следует отметить, что после пути HTML будет присутствовать параметр PAGEID, и значение параметра будет значением идентификатора в основной структуре страницы.
6. Передача параметров между страницами
<a ct-pageId="about" ct-parameter="&a=1&b=2"></a>
this.getCtMobile().startPage("/static/html/info.html?pageId=info&a=1&b=2");
Добавьте атрибут CT-page mode в базовую структуру страницы = «Result» или CT-page mode = «singleInstanceResult».
Например, в настоящее время есть две страницы index.html и PopUpDialog.html. На index.html есть кнопка eject, при нажатии на которую появляется PopUpDialog, эта страница PopUpDialog:
Определение index.html:
<div ct-data-role="page" id="index">
<a ct-pageId="PopUpDialog">Popup PopUpDialog</a>
<div class="resultText">Возвращаемое значение PopUpDialog<div>
</div>
Определение index.js:
import CtMobile from 'ctmobile';
import $ from 'jquery';
export default class extends CtMobile.Page{
constructor(ctmobile,id){
super(ctmobile,id);
}
/**
* override
*/
pageCreate() {
}
/**
* PopUpDialogTrigger on return
* override
*/
pageResult(e, resultCode, bundle) {
console.log("resultCode", resultCode, "bundle", JSON.stringify(bundle));
alert(`resultCode:${resultCode}\r\nbundle:${JSON.stringify(bundle)}`);
}
}
Определение PopUpDialog html:
<div ct-data-role="page" id="PopUpDialog" ct-data-mode="result">
<button class="result">return</button>
</div>
или
<div ct-data-role="page" id="PopUpDialog" ct-data-mode="singleInstanceResult">
<button class="result">return</button>
</div>
Определение PopUpDialog.js:
import CtMobile from 'ctmobile';
import $ from 'jquery';
export default class extends CtMobile.Page {
constructor(ctmobile,id){
super(ctmobile,id);
}
/**
* override
*/
pageCreate() {
const $btnEL = this.getPageJO().find(' .result');
$btnEl.on('click' , () => {
this.setResult('PopUpDialog', {a: 1, b: 2});
this.over();
});
}
}
В index.html необходимо переписать метод pageResult в index.js. Этот метод запускается после возврата PopUpDialog или вручную вызывает метод finish. Метод pageResult имеет три параметра e, resultCode и bundle, где resultCode используется для различения разных источников, а bundle — это значение, которое возвращается. В PopUpDialog.html необходимо вызвать метод this.setResult(resultCode,bundle) в PopUpDialog.js, чтобы установить возвращаемое значение. После вызова this.finish() страница закрывается.
Сценарии использования страниц с возвращаемыми значениями обычно делятся на два типа.
В случае «много к одному» флаг родительской страницы можно передать через метод setRequest.
В случае «один ко многим» разные источники можно различить по requestCode метода pageResult.
Установите значение атрибута ct-data-mode в базовой структуре страницы. Фреймворк поддерживает всего 5 режимов запуска.
Создаётся несколько шаблонов путём настройки или API для перехода на эту страницу, будет создан новый экземпляр, так называемый новый экземпляр — это Dom и соответствующий класс Page Dom будут новыми.
То же, что и Single в Android, например, добавьте следующий порядок разработки страниц: Index.html -> a.html -> b.html -> c.html -> d.html -> b.html Если для ct-data-mode b.html установлено значение single, то после выполнения вышеуказанного порядка страниц история стека в настоящее время index.html -> a.html -> b.html Также удалены c.html и d.html, удалённые коллеги также вызовут соответствующую функцию жизненного цикла. Но если вы нажмёте назад в b.html, то b.html всё равно будет уничтожен.
Полный синглтон никогда не уничтожается и существует только один экземпляр. Обратные действия и завершение доставки
В функции обратного вызова упорядоченной широковещательной рассылки есть два параметра: intent и opt. Параметр intent — это параметр, передаваемый уведомлением, а opt — объект, который имеет два метода: putExtras и next. Метод putExtras используется для передачи параметров, которые объединяются вместе. Вызывается только метод next для дальнейшей передачи данных.
При регистрации широковещательного сообщения, помимо Action, можно определить несколько категорий. Категория может рассматриваться как вторичный заголовок, который используется для более детального определения действия.
<a ct-pageId="a" ct-reload="true">a.html</a>
this.ctmobile.startPage('/static/html/a.html?pageId=a',{
Reload:true
});
Например, index.html -> a.html, тогда в стеке истории будет только a.html.
Метка не обрабатывается фреймворком Иногда мы не хотим, чтобы фреймворк обрабатывал поведение тега a, поэтому мы можем добавить ct-data-ajax="false" к тегу a.
Предварительная загрузка содержимого ajax
<div ct-data-role="page" id="index">
<a ct-pageId="a" ct-data-preload="true">into a.html</a>
<a ct-pageId="b" ct-data-preload="true">into b.html</a>
<a ct-pageId="c" ct-data-preload="true">into c.html</a>
<a ct-pageId="d" ct-data-preload="true">into d.html</a>
<a ct-pageId="e" ct-data-preload="true">into e.html</a>
</div>
Фреймворк загрузит содержимое a-e.html во время инициализации. Если в a-e.html есть страница, которую необходимо предварительно загрузить, она также будет предварительно загружена. Каждая страница будет загружаться только один раз и не будет загружаться повторно.
<div ct-data-role="page" id="about">
<header>
<a class="ct-back-icon" ct-data-rel="back"></a>
</header>
</div>
Свойство | Значение | Описание |
---|---|---|
ct-data-role | page | Элементы с этим атрибутом представляют собой страницу |
ct-data-rel | boolean | Когда true, элемент с этим атрибутом можно нажать для выполнения операции возврата. |
ct-pageId | string | Используется в теге для представления идентификатора загружаемой страницы |
ct-parameter | string | Используется в теге для представления параметров, которые будут переданы |
ct-data-transition | slideleft | Справа налево(наложение) |
slideright | Слева направо(наложение) | |
slideup | Сверху вниз(наложение) | |
slidedown | Снизу вверх(наложение) | |
wxslideleft | Аналогично WeChat справа налево | |
wxslideright | Аналогично WeChat слева направо | |
wxslideup | Аналогично WeChat снизу вверх | |
wxslidedown | Аналогично WeChat сверху вниз | |
pushslideleft | Справа налево(push) | |
----------------------- | ------------------------------------------------------------------ | |
pushslideup | Сдвинуть вверх (нажать) | |
pushslidedown | Опустить вниз (нажать) | |
material(default) | Материал Android по умолчанию | |
ct-data-mode | standard(default) | Множественное число |
single | Синглтон (при нажатии назад будет уничтожен) | |
singleInstance | Полный синглтон (не будет уничтожен) | |
result | С возвращаемым значением (можно вернуть возвращаемое значение на родительскую страницу) | |
singleInstanceResult | Полный синглтон с возвращаемым значением (не будет уничтожен, можно вернуть возвращаемое значение на родительскую страницу) | |
ct-data-ajax | boolean | Передавать ли переход тега a через фреймворк |
ct-data-preload | boolean | Предварительно загружать ли страницу атрибута href тега a |
ct-reload | boolean | Изменять ли количество window.history.length |
ct-data-intentfilter-action | string | Если страница должна подписаться на уведомление |
ct-data-intentfilter-categorys | [string1 string2 …] | Параметры фильтра при подписке |
ct-data-intentfilter-priority | number 0(default) | Приоритет при отправке упорядоченной широковещательной рассылки. Значение по умолчанию — 0. |
Проверьте и войдите в каталог демонстрации:
$ npm install
$ npm run devDll
$ npm start
Введите localhost:8000 в браузере, чтобы получить доступ к главной странице демонстрации.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )