1

で使用しようとしていますpikadaymoment、どういうわけか機能させることができません。

次のように使用しようとしてaurelia custom-attributeいます。

import "moment";
import "pikaday";

...
    self.picker = new Pikaday({
            field: $(this.element)[0]
            , format: "DD.MM.YYYY"
            , onSelect: (date) => {
                console.log(self.picker.getMoment().format('Do MMMM YYYY')); //getMoment() is always null.
            }
        });

momentの前にインポートしたにもかかわらずpikaday、機能していません (他の SO の質問と GitHub の問題でアドバイスされているように)、getMoment() は常に null です。日付でさえ、デフォルトでは に従ってフォーマットされていませんformat

また、コードの最初のブロックで適切に設定されていないため、hasMoment常にfalseにあることもわかりました( as can be ssen below のソースで):pikaday.jspikaday

(function (root, factory)
{
    'use strict';

    var moment;
    if (typeof exports === 'object') {
        // CommonJS module
        // Load moment.js as an optional dependency
        try { moment = require('moment'); } catch (e) {}
        module.exports = factory(moment);
    } else if (typeof define === 'function' && define.amd) {
        // AMD. Register as an anonymous module.
        define(function (req)
        {
            // Load moment.js as an optional dependency
            var id = 'moment';
            try { moment = req(id); } catch (e) {}
            return factory(moment);
        });
    } else {
        root.Pikaday = factory(root.moment);
    }
}(this, function (moment)
{
    'use strict';

    /**
     * feature detection and helper functions
     */
    var hasMoment = typeof moment === 'function', // this is always false as it can't be set in the above block.
.....

momentそのため、間違った方法でインポートしている可能性があると思いました。誰でもこれについて私を助けてもらえますか?

追加の詳細: 私のプロジェクト設定は次のとおりです。

tsconfig.json

{
    "compilerOptions": {
        "target": "es6",
        "isolatedModules": false,
        "jsx": "react",
        "declaration": false,
        "noImplicitAny": false,
        "removeComments": true,
        "noLib": false,
        "preserveConstEnums": true,
        "suppressImplicitAnyIndexErrors": false,
        "experimentalDecorators": true,
        "emitDecoratorMetadata": true,
        "experimentalAsyncFunctions": true,
        "allowSyntheticDefaultImports": false        
    },
    "filesGlob": [
        "**/*.ts",
        "**/*.tsx",
        "!node_modules/**"
    ],
    "files": [ ],
    "compileOnSave": false,
    "buildOnSave": false,
    "atom": {
        "rewriteTsconfig": false
    }
}

私も使用していsystem.jsます:

System.config({
  baseURL: "/",
  defaultJSExtensions: true,
  transpiler: "babel",
  babelOptions: {
    "optional": [
      "runtime",
      "optimisation.modules.system"
    ]
  },
  paths: {
    "*": "dist/*",
    "github:*": "jspm_packages/github/*",
    "npm:*": "jspm_packages/npm/*"
  },
  map: {
      ...
  }
})

回避策: 内部main(aurelia 構成):

import moment from "moment"; 
...
    // Register moment on global scope.
    window["moment"] = moment;
...

そして、はい、私はそれが醜いことを知っていますが、仕事をします:)

4

2 に答える 2

3

これはおそらく現時点ではあまり役に立ちませんが、これが私が解決した方法です:

import * as moment from 'moment';
import * as Pikaday from 'pikaday';

Pikaday.prototype.toString = function (format: string) {
    return (this._d instanceof Date) ? moment(this._d).format(format || this._o.format) : '';
};
于 2017-05-22T14:04:13.207 に答える
0

システムjsがどのように機能するかはわかりませんが、pikadayの前にロードされ、グローバルとして他のモジュールに公開されるようにする必要があるかもしれません.jqueryやpromiseポリフィルは通常処理されます.

于 2017-05-22T19:35:00.027 に答える