Aurelia + Typescript + @bindable

자크 부르크

Aurelia를 배우기 시작했고 웹 사이트의 시작 안내서를 따르고 있지만 Javascript 대신 Typescript를 사용하고 있습니다. 모두 좋지만 구성 요소 @bindable에서 데코레이터가 작동하도록 만드는 데 문제가 nav-bar있습니다.

내 설정은 다음과 같습니다.

  • Visual Studio 2015 (ASP.NET vNext 프로젝트)
  • 타이프 스크립트 1.5.3
  • JSPM 0.16.0 베타 7
  • SystemJS 0.18.9
  • Aurelia (프레임 워크 : 0.15.0, 부트 스트 래퍼 : 0.16.0)

다음은 내 nav-bar.ts 파일의 내용입니다.

import {bindable} from "aurelia-framework";
import {Router} from "aurelia-router";

export class NavBar {
      @bindable router: Router = null;
}

tsconfig.json다음과 같은 파일이 있습니다.

{
   "compilerOptions": {
      "noImplicitAny": false,
      "noEmitOnError": false,
      "removeComments": false,
      "target": "es5",
      "module": "system",
      "experimentalDecorators": true,
      "emitDecoratorMetadata": true
   }
}

VS가 Typescript 파일을 트랜스 파일하도록하면 생성 된 nav-bar.js 파일은 다음과 같습니다.

var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") return Reflect.decorate(decorators, target, key, desc);
    switch (arguments.length) {
        case 2: return decorators.reduceRight(function(o, d) { return (d && d(o)) || o; }, target);
        case 3: return decorators.reduceRight(function(o, d) { return (d && d(target, key)), void 0; }, void 0);
        case 4: return decorators.reduceRight(function(o, d) { return (d && d(target, key, o)) || o; }, desc);
    }
};
var __metadata = (this && this.__metadata) || function (k, v) {
    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};System.register(['aurelia-framework', 'aurelia-router'], function(exports_1) {
    var aurelia_framework_1, aurelia_router_1;
    var NavBar;
    return {
        setters:[
            function (_aurelia_framework_1) {
                aurelia_framework_1 = _aurelia_framework_1;
            },
            function (_aurelia_router_1) {
                aurelia_router_1 = _aurelia_router_1;
            }],
        execute: function() {
            NavBar = (function () {
                function NavBar() {
                    this.router = null;
                }
                __decorate([
                    aurelia_framework_1.bindable, 
                    __metadata('design:type', aurelia_router_1.Router)
                ], NavBar.prototype, "router");
                return NavBar;
            })();
            exports_1("NavBar", NavBar);
        }
    }
});

나는 또한 사용해 보았고 gulp-typescript결과는 동일합니다. 이 두 가지 솔루션을 사용하면 바인딩이 작동하지 않고 navbar가 비어 있습니다.

gulp-babel대신 사용 하면 생성 된 nav-bar.js 파일은 다음과 같습니다.

System.register(["aurelia-framework", "aurelia-router"], function (_export) {
    "use strict";

    var bindable, Router, NavBar;

    var _createDecoratedClass = (function () { function defineProperties(target, descriptors, initializers) { for (var i = 0; i < descriptors.length; i++) { var descriptor = descriptors[i]; var decorators = descriptor.decorators; var key = descriptor.key; delete descriptor.key; delete descriptor.decorators; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor || descriptor.initializer) descriptor.writable = true; if (decorators) { for (var f = 0; f < decorators.length; f++) { var decorator = decorators[f]; if (typeof decorator === "function") { descriptor = decorator(target, key, descriptor) || descriptor; } else { throw new TypeError("The decorator for method " + descriptor.key + " is of the invalid type " + typeof decorator); } } if (descriptor.initializer !== undefined) { initializers[key] = descriptor; continue; } } Object.defineProperty(target, key, descriptor); } } return function (Constructor, protoProps, staticProps, protoInitializers, staticInitializers) { if (protoProps) defineProperties(Constructor.prototype, protoProps, protoInitializers); if (staticProps) defineProperties(Constructor, staticProps, staticInitializers); return Constructor; }; })();

    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

    function _defineDecoratedPropertyDescriptor(target, key, descriptors) { var _descriptor = descriptors[key]; if (!_descriptor) return; var descriptor = {}; for (var _key in _descriptor) descriptor[_key] = _descriptor[_key]; descriptor.value = descriptor.initializer ? descriptor.initializer.call(target) : undefined; Object.defineProperty(target, key, descriptor); }

    return {
        setters: [function (_aureliaFramework) {
            bindable = _aureliaFramework.bindable;
        }, function (_aureliaRouter) {
            Router = _aureliaRouter.Router;
        }],
        execute: function () {
            NavBar = (function () {
                var _instanceInitializers = {};

                function NavBar() {
                    _classCallCheck(this, NavBar);

                    _defineDecoratedPropertyDescriptor(this, "router", _instanceInitializers);
                }

                _createDecoratedClass(NavBar, [{
                    key: "router",
                    decorators: [bindable],
                    initializer: function initializer() {
                        return null;
                    },
                    enumerable: true
                }], null, _instanceInitializers);

                return NavBar;
            })();

            _export("NavBar", NavBar);
        }
    };
});

gulp-babel 메서드를 사용하면 작동하지만 바벨이 Typescript를 변환하는 것이 아니라고 생각하므로 나중에 고급 코드를 작성할 때 문제가 발생할 수 있으므로 반드시 올바른 옵션은 아닙니다.

질문

공식 Typescript 트랜스 파일러를 사용하여 작동하도록 할 수있는 것이 있습니까?

누구나 성공 했습니까?

마이크 그레이엄

모듈 : "system"대신 "amd"모듈을 시도하십시오.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

'포트'aurelia-skeleton-navigation to typescript

분류에서Dev

Typescript가있는 알림 Aurelia-KendoUI-bridge

분류에서Dev

jQuery-UI DatePicker가 Aurelia 및 Typescript에서 작동하지 않음

분류에서Dev

Intellij Idea로 Aurelia를 컴파일하는 Typescript 오류

분류에서Dev

Aurelia skeleton-typescript-webpack이 Windows에서 시작되지 않음

분류에서Dev

Aurelia CLI + Typescript : 모듈 오류를 찾을 수 없음

분류에서Dev

aurelia skeleton-typescript-aspnetcore에 패키지를 설치하는 방법

분류에서Dev

명확성 필요 : 라우터 이벤트 Aurelia (Typescript) 구독

분류에서Dev

Aurelia 및 TypeScript에서 웹 워커의 적절한 구현

분류에서Dev

Aurelia Typescript에서 일반 서비스를 만드는 방법

분류에서Dev

Aurelia typescript 페이지 맨 위로 스크롤

분류에서Dev

aurelia vs2015 typescript 스켈레톤에 "dist"디렉토리가 없습니다.

분류에서Dev

Typescript 및 Aurelia를 사용하여 ramda를 가져올 수 없습니다.

분류에서Dev

Internet Explorer 10에서 Aurelia TypeScript 응용 프로그램이 작동하지 않음

분류에서Dev

Aurelia Typescript http-fetch-client 비동기 캐치가 작동하지 않습니다.

분류에서Dev

Aurelia Less 지원

분류에서Dev

Aurelia 및 UIkit scrollyspy

분류에서Dev

Aurelia 및 Discogs API

분류에서Dev

Aurelia-Typescript에서 업로드하기 전에 이미지의 크기와 확장자를 확인하는 방법은 무엇입니까?

분류에서Dev

Typescript에서 전역 변수를 참조하려고하면 Aurelia 프로젝트에서 오류가 발생합니다.

분류에서Dev

Aurelia 번들 : "aurelia-cli"로드 오류

분류에서Dev

Aurelia Custom Elements data binding

분류에서Dev

Using humane.js with aurelia

분류에서Dev

Aurelia 기능 globalResources (jspm)

분류에서Dev

CKEditor와 Aurelia 통합

분류에서Dev

java.lang.ClassNotFoundException가 : org.springframework.boot.context.properties.bind.Bindable

분류에서Dev

Xamarin Forms Bindable Property with OneWay가 작동하지 않습니다.

분류에서Dev

Xamarin Forms Custom View, Bindable Observable Collection <object> throws "Specific Cast Not Valid"

분류에서Dev

AngularJS 구문-John Papa의 Bindable up-top 구문이 모호합니다.

Related 관련 기사

  1. 1

    '포트'aurelia-skeleton-navigation to typescript

  2. 2

    Typescript가있는 알림 Aurelia-KendoUI-bridge

  3. 3

    jQuery-UI DatePicker가 Aurelia 및 Typescript에서 작동하지 않음

  4. 4

    Intellij Idea로 Aurelia를 컴파일하는 Typescript 오류

  5. 5

    Aurelia skeleton-typescript-webpack이 Windows에서 시작되지 않음

  6. 6

    Aurelia CLI + Typescript : 모듈 오류를 찾을 수 없음

  7. 7

    aurelia skeleton-typescript-aspnetcore에 패키지를 설치하는 방법

  8. 8

    명확성 필요 : 라우터 이벤트 Aurelia (Typescript) 구독

  9. 9

    Aurelia 및 TypeScript에서 웹 워커의 적절한 구현

  10. 10

    Aurelia Typescript에서 일반 서비스를 만드는 방법

  11. 11

    Aurelia typescript 페이지 맨 위로 스크롤

  12. 12

    aurelia vs2015 typescript 스켈레톤에 "dist"디렉토리가 없습니다.

  13. 13

    Typescript 및 Aurelia를 사용하여 ramda를 가져올 수 없습니다.

  14. 14

    Internet Explorer 10에서 Aurelia TypeScript 응용 프로그램이 작동하지 않음

  15. 15

    Aurelia Typescript http-fetch-client 비동기 캐치가 작동하지 않습니다.

  16. 16

    Aurelia Less 지원

  17. 17

    Aurelia 및 UIkit scrollyspy

  18. 18

    Aurelia 및 Discogs API

  19. 19

    Aurelia-Typescript에서 업로드하기 전에 이미지의 크기와 확장자를 확인하는 방법은 무엇입니까?

  20. 20

    Typescript에서 전역 변수를 참조하려고하면 Aurelia 프로젝트에서 오류가 발생합니다.

  21. 21

    Aurelia 번들 : "aurelia-cli"로드 오류

  22. 22

    Aurelia Custom Elements data binding

  23. 23

    Using humane.js with aurelia

  24. 24

    Aurelia 기능 globalResources (jspm)

  25. 25

    CKEditor와 Aurelia 통합

  26. 26

    java.lang.ClassNotFoundException가 : org.springframework.boot.context.properties.bind.Bindable

  27. 27

    Xamarin Forms Bindable Property with OneWay가 작동하지 않습니다.

  28. 28

    Xamarin Forms Custom View, Bindable Observable Collection <object> throws "Specific Cast Not Valid"

  29. 29

    AngularJS 구문-John Papa의 Bindable up-top 구문이 모호합니다.

뜨겁다태그

보관