2015-05-18 12 views
14

polymer-element'dan özel bir öğe oluşturmaya çalışıyorum, ancak @CustomTag işini yapamıyorum. Benim dart dosyası (my_element.dart) şöyle görünür:HTML içe aktarma: CustomTag kayıtlı değil

@HtmlImport('my_element.html') 
library projects.projectFolder.layout; 

import 'package:polymer/polymer.dart'; 
import 'dart:html'; 

@CustomTag('my-element') 
class MyElement extends PolymerElement { 

    @published String caption; 
    MyElement.created() : super.created(); 
} 

Benim html dosyası (my_element.html) şöyle görünür:

<link rel="import" href="../../../../packages/polymer/polymer.html"> 

<polymer-element name="my-element"> 
    <template> 
    <link rel="stylesheet" href="my_element.css"> 

    <core-toolbar> 
     <h1>{{ caption }}</h1> 
    </core-toolbar> 

    </template> 
    <script type="application/dart" src="../my_element.dart"></script> 
</polymer-element> 

şey Krom konsol şu hatayı baskı devam ediyor olmasıdır:

No elements registered in a while, but still waiting on 1 elements to be registered. Check that you have a class with an @CustomTag annotation for each of the following tags: 'my-element'. 

Özel etiketin olması gerektiği gibi bildirildiğinden merak ediyorum. .html'a ulaştığında .dart dosyasını okumadığı görülüyor.
.html dosya başka bir üst .html dosyasından çağrılır. Dosyaların çağrılma sırasının sorun olabileceğini düşünüyorum, ancak yine de Dart'ın çalışmadan önce derlenmesi durumunda, umursamamalı.
Birkaç çözüm denedim ama hiçbiri işe yaramadı. Çalışılan tek şey oldukça kirli olan, yani my_element.dart dosyasını doğrudan ana my_app.dart dosyasından içe aktarıyor. Sanırım bu şekilde yapılmamalı çünkü bu her my_element.dart dosyasını aynı ana my_app.dart numaralı dosyaya aktarmak anlamına geliyor.
Benim index.html dosyası aşağıdaki gibi görünür

DÜZENLEME (index.htmlpubspec.yml ekleyin):

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes"> 
    <title>My app</title> 
</head> 
<body unresolved fullbleed> 
    <my-app></my-app> 

    <script type="application/dart"> 
    import 'package:polymer/polymer.dart'; 
    import 'package:project/my_app.dart'; 

    main() => initPolymer(); 

    </script> 
</body> 
</html> 

my_app tüm diğerleri gitmek ana unsurdur başka bir özel elementtir. Başka bir deyişle, uygulamanın ana denetleyicisi gibi. Bu elemanın .dart ve .html dosyalarının yanı sıra my-element gibi diğer öğeleri de arayabilirsiniz.
Gördüğünüz gibi, main() işlevim çok basittir, çünkü yalnızca init Polymer (bkz. index.html).

. 
├── README.md 
├── build 
│   └── web 
│    ├── index.html 
│    ├── index.html.polymer.bootstrap.dart.js 
│    └── packages 
├── lib 
│   ├── my_app.dart 
│   └── src 
│    ├── elements 
│    ├── layout 
│    │   ├── my_element.css 
│    │   ├── my_element.dart 
│    │   └── my_element.html 
│    ├── my_app.css 
│    ├── my_app.html 
│    └── modules 
│     └── module.dart 
│    ├── my_app.css 
├── pubspec.lock 
├── pubspec.yaml 
└── web 
│ ├── index.html 
│ └── packages -> ../packages 
│    ├── my_app.html 
│    └── modules 
│     └── module.dart 

Bu düzenleme umut:

Benim dizin şöyle
name: project 
version: 0.0.1 
description: Some project. 
author: Tomas 
homepage: https://github.com/******* 

environment: 
    sdk: '>=1.10.0 <2.0.0' 

dependencies: 
    polymer: '^0.16.0' 
    core_elements: '^0.7.1' 
    paper_elements: '^0.7.1' 
    route_hierarchical: "^0.6.1" 

transformers: 
- polymer: 
    entry_points: web/index.html 
- $dart2js: 
    $include: "**/*.polymer.bootstrap.dart" 

(ben sadece bir kısmını, umarım önemli bir göster):

Benim pubspec.yml aşağıdaki gibi görünür gerekenden fazlasını karıştırmaz. Ben sadece bir Dart app doğru klasör yapısı ve ithalat formu olduğunu bilmek istiyorum.

Kısa vadede: büyük bir uygulamayı dartta programlarken ağaç nasıl görünmeli ve ithalatı nerede yapmalıyım? Bazı öğreticiler de dahil olmak üzere her türlü belgeye bakıyorum, ancak hepsinin, kodun büyük kısmının, istemediğim web klasöründe olduğu çok basit örnekler hakkında konuştuk.

DÜZENLEME (my_app.html ve my_app.dart ekleyin özetlemek ve ifadeleri) Daha az deyişle

: I (bu yanıtında yukarıda tanımlanan) my_element.html ve my_element.dart tarafından tanımlanan özel bir elemanı ettik

ve istediğim sadece html kullanarak başka bir my_app öğeye içe aktarılır. Yani değil my_app.dart yılında my_element.dart ithal ederek, ama sadece my_app.html bir bağlantı etiketi kullanarak my_element.html ithal ederek:

<link rel="import" href="../../../packages/polymer/polymer.html"> 
<link rel="import" href="layout/my_element.html"> 

<polymer-element name="my-app"> 
    <template> 

    <core-scaffold id="scaffold"> 

     <my-element tool flex></my-element> 

     <main fit></main> 

    </core-scaffold> 

    </template> 
    <script type="application/dart" src="../my_app.dart"></script> 
</polymer-element> 

my_app.dart:

@HtmlImport('src/my_app.html') 

import 'package:polymer/polymer.dart'; 
import 'package:core_elements/core_scaffold.dart'; 

@CustomTag('my-app') 
class MyApp extends PolymerElement { 

    MyApp.created() : super.created(); 
} 

değil <script type="application/dart" src="../my_element.dart"></script> o dart yüklemek için derleyici anlatmak için yeterli olmalı html içe aktarması tarafından tanımlanan geçiş bağımlılığını izleyerek öğe etiketini kaydetmek için dosya?

+0

'main()', 'index'iniz nasıldır? html' ve 'pubspec.yaml' benziyor? Öğe dosyalarınız hangi dizinde? –

+1

Sadece istenen bilgileri gösterdiğim soruya bir değişiklik yaptım. Yardım ettiğin için teşekkür ederim :). – tomasyany

+0

Sadece onaylamak için 'my_app.dart' dosyanız' my_element.dart' dosyanızı içe aktarıyor mu? –

cevap

0

Tüm özel bileşenli Dart sınıflarını my_app.dart ürününüze aktarmanız gerekir. Genellikle, içe aktarılacak tek bir Dart dosyası oluşturursunuz, bu da her bir girişi my_app.dart temiz kalmasını sağlayacak şekilde dışa aktarır.

İlgili konular