Ember.js 如何使用余烬时刻设置短月份名称

Ember.js 如何使用余烬时刻设置短月份名称,ember.js,momentjs,Ember.js,Momentjs,我现在需要换短的一个月。 但我做不到。 我已经试着去做了 localeOutputPath: 'assets/moment-locales' 打电话 Ember.$.getScript('/assets/moment-locales/ru.js'); 在这种情况下,我有余烬幻影错误 Your Ember app tried to GET '/assets/moment-locales/ru.js?_=1490191145335', but there was no route defin

我现在需要换短的一个月。 但我做不到。 我已经试着去做了

localeOutputPath: 'assets/moment-locales'
打电话

Ember.$.getScript('/assets/moment-locales/ru.js');
在这种情况下,我有余烬幻影错误

 Your Ember app tried to GET '/assets/moment-locales/ru.js?_=1490191145335',
 but there was no route defined to handle this request. Define a route that
 matches this path in your mirage/config.js file

这是为时刻设置短月份名称的简单方法吗?

我假设您使用的是
余烬时刻
插件;并且已经配置了
config/environment.js

moment: {
  // This will output _all_ locale scripts to assets/moment-locales
  localeOutputPath: 'assets/moment-locales'
},
正如你提到的

Ember.$.getScript('/assets/moment-locales/ru.js');
提供了一种在需要时动态加载力矩
ru
locale的方法。这意味着,与将相关区域设置包含到应用程序的javascript文件中不同,您更愿意在应用程序中的某个用户请求时加载相关区域设置。通常,最好在路由器的钩子方法中执行这种加载操作,例如
beforeModel
model

为了从
时刻
获取短月份名称;您需要首先通过导入ES6
moment
模块

import moment from 'moment';
并使用访问短月份名称

moment.monthsShort()
在我看来;您请求区域设置的方式有问题,因此您将得到您提到的错误。我相信工作代码是纯文本的更好解释;因此,我创建了以下内容来说明如何在路由中动态更改区域设置,以及如何显示从
moment
检索到的短名称。请通过克隆并在本地主机中运行来查看它

在此存储库中的应用程序中,
application.hbs
包含指向5个子路由的链接;每个都以不同的语言显示月份的简短名称。动态加载相关区域设置的代码位于
routes/locale-route.js
文件的
model
hook方法中。如果已加载区域设置(请注意,默认情况下,英语包含在
moment
)中),它只需通过切换到目标区域设置(
moment.locale(localeToLoad);
)返回月份的短名称即可。否则,它将执行对服务器的远程调用,并等待响应(通过使用承诺)返回月份名称。5种不同语言的所有路由均从此基本路由扩展。一旦从服务器加载区域设置;您不再需要再次加载它,正如我所解释的,
locale路由
已经处理了它。我希望这有帮助

在读了你的评论之后;我更新了源代码以包含
ember cli mirage
。Mirage是一个客户端模拟服务器,用于开发、测试和原型化应用程序。一旦您将其作为依赖项包含,它就会开始拦截您的远程呼叫请求。因此,在您的案例中,mirage会拦截要求相关语言环境的请求。你需要做的是穿越海市蜃楼。为了做到这一点,您需要添加以下内容

this.passthrough('/assets/moment-locales/**');

mirage/config.js
,这样mirage就不会在运行时干扰要求苛刻的本地环境。请参阅我提供的git存储库下的内容。这肯定会解决您的问题。

我假设您使用的是
余烬时刻
插件;并且已经配置了
config/environment.js

moment: {
  // This will output _all_ locale scripts to assets/moment-locales
  localeOutputPath: 'assets/moment-locales'
},
正如你提到的

Ember.$.getScript('/assets/moment-locales/ru.js');
提供了一种在需要时动态加载力矩
ru
locale的方法。这意味着,与将相关区域设置包含到应用程序的javascript文件中不同,您更愿意在应用程序中的某个用户请求时加载相关区域设置。通常,最好在路由器的钩子方法中执行这种加载操作,例如
beforeModel
model

为了从
时刻
获取短月份名称;您需要首先通过导入ES6
moment
模块

import moment from 'moment';
并使用访问短月份名称

moment.monthsShort()
在我看来;您请求区域设置的方式有问题,因此您将得到您提到的错误。我相信工作代码是纯文本的更好解释;因此,我创建了以下内容来说明如何在路由中动态更改区域设置,以及如何显示从
moment
检索到的短名称。请通过克隆并在本地主机中运行来查看它

在此存储库中的应用程序中,
application.hbs
包含指向5个子路由的链接;每个都以不同的语言显示月份的简短名称。动态加载相关区域设置的代码位于
routes/locale-route.js
文件的
model
hook方法中。如果已加载区域设置(请注意,默认情况下,英语包含在
moment
)中),它只需通过切换到目标区域设置(
moment.locale(localeToLoad);
)返回月份的短名称即可。否则,它将执行对服务器的远程调用,并等待响应(通过使用承诺)返回月份名称。5种不同语言的所有路由均从此基本路由扩展。一旦从服务器加载区域设置;您不再需要再次加载它,正如我所解释的,
locale路由
已经处理了它。我希望这有帮助

在读了你的评论之后;我更新了源代码以包含
ember cli mirage
。Mirage是一个客户端模拟服务器,用于开发、测试和原型化应用程序。一旦您将其作为依赖项包含,它就会开始拦截您的远程呼叫请求。因此,在您的案例中,mirage会拦截要求相关语言环境的请求。你需要做的是穿越海市蜃楼。为了做到这一点,您需要添加以下内容

this.passthrough('/assets/moment-locales/**');

mirage/config.js
,这样mirage就不会在运行时干扰要求苛刻的本地环境。请参阅我提供的git存储库下的内容。这肯定会解决你的问题。

我的答案有什么不清楚的吗?请克隆我提供的源代码,如果需要,请进一步提问。我的答案有什么不清楚的吗?请克隆我提供的源代码