创建自定义 Polymer 元素
Creating a custom Polymer element
我正在尝试创建一个扩展 paper-shadow
以显示推文的自定义 Polymer 元素。
这是我的实现:
tweet_element.html
<link rel="import" href="packages/paper_elements/paper_shadow.html">
<link rel="import" href="packages/polymer/polymer.html">
<link rel="stylesheet" href="tweet_element.css">
<polymer-element name="tweet-element" extends="paper-shadow">
<template>
<div id="header">
<div id="user-image">
<img src="{{userImageUrl}}">
</div>
<div id="details">
<div id="user">{{user}}</div>
<div id="date-published">{{datePublished}}</div>
</div>
</div>
<div id="content">
<div id="text">{{text}}</div>
<div id="photos">{{photos}}</div>
</div>
</template>
<script type="application/dart" src="twitter.dart"></script>
</polymer-element>
twitter.dart
import 'package:polymer/polymer.dart';
@CustomTag('tweet-element')
class TweetElement extends PolymerElement {
@Observable String userImageUrl;
@Observable String user;
@Observable String datePublished;
@Observable String text;
TweetElement.created() : super.created();
void update(Tweet tweet) {
userImageUrl = tweet.user.profileImage;
user = '${tweet.user.name} (@${tweet.user.screenName})';
datePublished = _parseDate(tweet.date);
text = tweet.text;
}
...
}
最后是创建 TweetElement 并尝试将其添加到 DOM:
的代码
import 'dart:html';
import 'package:polymer/polymer.dart';
import 'twitter.dart';
...
var mainContent = querySelector('#main-content');
var element;
for (var tweet in tweets) {
element = new TweetElement.created();
element.update(tweet);
mainContent.children.add(element);
}
当我 运行 我得到:
Exception: Uncaught Error: created called outside of custom element creation.
然后我尝试将 twitter.dart 更改为:
TweetElement.created() : super.created();
TweetElement (Tweet tweet) {
TweetElement.created();
userImageUrl = tweet.user.profileImage;
user = '${tweet.user.name} (@${tweet.user.screenName})';
datePublished = _parseDate(tweet.date);
text = tweet.text;
}
然后像这样将元素添加到 DOM:
var mainContent = querySelector('#main-content');
var element;
for (var tweet in tweets) {
element = new TweetElement(tweet);
mainContent.children.add(element);
}
现在我得到了这个错误:
Internal error: unresolved implicit call to super constructor 'PolymerElement()' TweetElement (Tweet tweet) {
拉尔夫。
您可以通过两种方式做到这一点:
选项 A
如果你想在你的 Dart 代码中创建一个聚合物元素,你只需要这样创建标签:
var myTweetElement = new Element.tag ('tweet-element');
mainContent.childern.add(myTweetElement);
此外,检查您是否导入了 html 库:
import 'dart:html';
选项B:(最酷的)
您可以通过将此工厂添加到您的 twitter.dart:
来更加方便(并且更加面向对象)
factory TweetElement () => new Element.tag('tweet-element');
然后,在你的飞镖代码中创建标签,更具可读性:
var myTweetElement = new TweetElement (); // This uses the factory transparently
mainContent.children.add(myTweetElement);
此外,您还可以设置属性的值。由于这些是可观察的,绑定将自动更新:
myTweetElement.userImageUrl = "foo"
myTweetElement.user = "bar"
myTweetElement.datePublished = "baz"
myTweetElement.text = "qux"
或者如果你喜欢级联运算符,你可以这样写:
myTweetElement..userImageUrl = "foo"
..user = "bar"
..datePublished = "baz"
..text = "qux";
希望这对您有所帮助。
我正在尝试创建一个扩展 paper-shadow
以显示推文的自定义 Polymer 元素。
这是我的实现:
tweet_element.html
<link rel="import" href="packages/paper_elements/paper_shadow.html">
<link rel="import" href="packages/polymer/polymer.html">
<link rel="stylesheet" href="tweet_element.css">
<polymer-element name="tweet-element" extends="paper-shadow">
<template>
<div id="header">
<div id="user-image">
<img src="{{userImageUrl}}">
</div>
<div id="details">
<div id="user">{{user}}</div>
<div id="date-published">{{datePublished}}</div>
</div>
</div>
<div id="content">
<div id="text">{{text}}</div>
<div id="photos">{{photos}}</div>
</div>
</template>
<script type="application/dart" src="twitter.dart"></script>
</polymer-element>
twitter.dart
import 'package:polymer/polymer.dart';
@CustomTag('tweet-element')
class TweetElement extends PolymerElement {
@Observable String userImageUrl;
@Observable String user;
@Observable String datePublished;
@Observable String text;
TweetElement.created() : super.created();
void update(Tweet tweet) {
userImageUrl = tweet.user.profileImage;
user = '${tweet.user.name} (@${tweet.user.screenName})';
datePublished = _parseDate(tweet.date);
text = tweet.text;
}
...
}
最后是创建 TweetElement 并尝试将其添加到 DOM:
的代码import 'dart:html';
import 'package:polymer/polymer.dart';
import 'twitter.dart';
...
var mainContent = querySelector('#main-content');
var element;
for (var tweet in tweets) {
element = new TweetElement.created();
element.update(tweet);
mainContent.children.add(element);
}
当我 运行 我得到:
Exception: Uncaught Error: created called outside of custom element creation.
然后我尝试将 twitter.dart 更改为:
TweetElement.created() : super.created();
TweetElement (Tweet tweet) {
TweetElement.created();
userImageUrl = tweet.user.profileImage;
user = '${tweet.user.name} (@${tweet.user.screenName})';
datePublished = _parseDate(tweet.date);
text = tweet.text;
}
然后像这样将元素添加到 DOM:
var mainContent = querySelector('#main-content');
var element;
for (var tweet in tweets) {
element = new TweetElement(tweet);
mainContent.children.add(element);
}
现在我得到了这个错误:
Internal error: unresolved implicit call to super constructor 'PolymerElement()' TweetElement (Tweet tweet) {
拉尔夫。
您可以通过两种方式做到这一点:
选项 A
如果你想在你的 Dart 代码中创建一个聚合物元素,你只需要这样创建标签:
var myTweetElement = new Element.tag ('tweet-element');
mainContent.childern.add(myTweetElement);
此外,检查您是否导入了 html 库:
import 'dart:html';
选项B:(最酷的)
您可以通过将此工厂添加到您的 twitter.dart:
来更加方便(并且更加面向对象)factory TweetElement () => new Element.tag('tweet-element');
然后,在你的飞镖代码中创建标签,更具可读性:
var myTweetElement = new TweetElement (); // This uses the factory transparently
mainContent.children.add(myTweetElement);
此外,您还可以设置属性的值。由于这些是可观察的,绑定将自动更新:
myTweetElement.userImageUrl = "foo"
myTweetElement.user = "bar"
myTweetElement.datePublished = "baz"
myTweetElement.text = "qux"
或者如果你喜欢级联运算符,你可以这样写:
myTweetElement..userImageUrl = "foo"
..user = "bar"
..datePublished = "baz"
..text = "qux";
希望这对您有所帮助。