#dart #main #dart-polymer
#dart #program-entry-point #dart-polymer
Вопрос:
Редактор Dart в настоящее время поддерживает только один параметр создания нового проекта dart polymer (/ file). И эта опция настраивает 4 файла во вложенном каталоге / web без main(), и для получения main требуются некоторые изменения в базовой панели, которые были для меня не совсем очевидны.
Мне помог на форуме Dart ответить на этот несколько «практический» вопрос Гюнтер Зукбауэр, поэтому я хочу поделиться результатами этих минимальных изменений в этом приятном минималистичном проекте, который предоставил мне именно ту отправную точку, на которой нужно заново основывать мой устаревший код и файловую структуру.
Мне кажется, это обеспечивает хорошую отправную точку для повторного создания приложений, которые устарели из-за всех быстрых и ВАЖНЫХ изменений, внесенных за последние несколько месяцев.
Ответ №1:
Вот 6 файлов, которые необходимо изменить (название приложения: app_with_main):
1 app_with_main.css БЕЗ ИЗМЕНЕНИЙ
2 clickcounter.dart БЕЗ ИЗМЕНЕНИЙ
3 clickcounter.html ИЗМЕНЕНИЙ НЕТ
4 index.html:
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sample app</title>
<!-- <script src="packages/web_components/platform.js"></script>
not necessary anymore with Polymer >= 0.14.0 -->
<script src="packages/web_components/dart_support.js"></script>
<link rel="import" href="clickcounter.html">
<!-- ORIGINAL SCRIPT
<script type="application/dart">export 'package:polymer/init.dart';</script>
<script src="packages/browser/dart.js"></script>
-->
<link rel="stylesheet" href="app_with_main.css">
</head>
<body>
<h1>App with main</h1>
<p>Hello world from Dart!</p>
<div id="sample_container_id">
<click-counter count="5"></click-counter>
</div>
<script type="application/dart">export 'init.dart';</script>
</body>
</html>
#5 . инициализация.dart (новая)
импортируйте «package:polymer/ полимер.dart»;
main() {
print("always before polymer initialization is complete");
initPolymer().run(() {
print('''Code here will be called almost immediately and cannot rely
on the polymer elements being instantiated.''');
Polymer.onReady.then((_) {
print('''at this point the onReady callback has been returned and thus the polymer
initialization process will be complete''');
});
});
6 Файл проекта yaml должен быть изменен, чтобы установить entry_point в index.html таким образом:
name: app_with_main
description: A sample Polymer application
dependencies:
polymer: ">=0.11.0-dev.2 <0.12.0"
transformers:
- polymer:
entry_points: web/index.html
И это должно сработать, вы должны быть запущены со структурой кода, которая может расти вместе с вашим проектом в течение длительного времени….
Еще раз спасибо супергерою Dart Гюнтеру Зукчбауэру!
Ответ №2:
Для справки и сравнения, я думаю, полезно также рассмотреть приложение Skeleton Polymer Dart, которое генерируется редактором разработчиков Chrome. Оно включает в себя Dart main().
Ниже я опубликовал index.html и main.dart из веб-папки недавно созданного проекта Polymer Dart Paper elements (по состоянию на 2014-10-10).
Обратите внимание, что они ссылаются на пользовательский элемент sample_app, который генерируется в папке lib, но вставка его ниже также была бы слишком длинной.
1. Index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>HelloDartWebPaper</title>
<link rel="stylesheet" href="styles.css">
<script src="packages/web_components/platform.js"></script>
<script src="packages/web_components/dart_support.js"></script>
<link rel="import" href="packages/HelloDartWebPaper/sample_app.html">
</head>
<body unresolved>
<sample-app></sample-app>
<script src="main.dart" type="application/dart"></script>
<script src="packages/browser/dart.js"></script>
</body>
</html>
2. main.dart
import 'package:polymer/polymer.dart';
import 'package:paper_elements/paper_toast.dart';
import 'package:HelloDartWebPaper/sample_app.dart';
void main() {
// Init polymer.
initPolymer();
// Register Polymer components (ones that are actually used in the app).
registerWidgetsWithPolymer();
}
@initMethod
void postPolymerBoot() {
print('Polymer init complete.');
}
void registerWidgetsWithPolymer() {
upgradePaperToast();
Polymer.register('sample-app', SampleApp);
}
-
стили.css
опущено — не относится к делу -
компонент sample_app в библиотеке.