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
为了从时刻
获取短月份名称;您需要首先通过导入ES6moment
模块
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
为了从时刻
获取短月份名称;您需要首先通过导入ES6moment
模块
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存储库下的内容。这肯定会解决你的问题。我的答案有什么不清楚的吗?请克隆我提供的源代码,如果需要,请进一步提问。我的答案有什么不清楚的吗?请克隆我提供的源代码