2016-02-03 2 views
0

Я пытаюсь использовать pikaday с moment, но почему-то я не могу заставить его работать.pikaday с моментом не работает

Я пытаюсь использовать его в aureliacustom-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, он не работает (в соответствии с рекомендациями в других так вопросы и проблемы GitHub), и getMoment () всегда равно нулю. Даже дата не по умолчанию отформатирована в соответствии с format.

Я также обнаружил, что hasMoment всегда false в pikaday.js, так как он не установлен должным образом в первом блоке кода (в источнике pikaday, как можно ssen ниже):

(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; 
... 

И, да, я знаю, что это некрасиво, но делает работу :)

+0

У вас есть момент, установленный с jspm? 'jspm install npm: moment', на самом деле вам не нужно импортировать« момент », если вы его не используете. Если вам нужно «import moment from« moment » – valichek

+0

Спасибо, что ответили. На самом деле я попробовал как «импортный момент с момента», так и «импорт» момента », но никто из них не выполнял мою задачу. И что касается его использования, «момент» явно не используется в моем машинописном коде. Однако я использую календарный контроль 'pikaday', который ищет« момент »и пытается его использовать; таким образом, мне нужно как-то загрузить его. ** P.S. ** Хотя 'import moment from 'moment'' помогает использовать момент непосредственно в моем файле машинописных файлов. –

ответ

1

Это, вероятно, не очень помогает вам в данный момент, но это, как Я решил его:

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) : ''; 
}; 
0

Не знаю, как System работает, но расслоение плотных вы, возможно, придется каким-то образом убедиться, что он получает загружен до pikaday и выставить его на другие модули, как глобальная - как JQuery и обещают polyfils, как правило, обрабатывается.

Смежные вопросы