我试图理解javascript中的一些代码片段。但是太过困惑,似乎在所有可能的方式中都使用了所有符号。
import Ember from 'ember';
export default Ember.Route.extend({
metrics: inject.service(),
activate() {
this._trackPage();
},
_trackPage() {
run.scheduleOnce('afterRender', this, () => {
const page = document.location.href;
const title = this.routeName;
get(this, 'metrics').trackPage({ page, title });
});
}
});
问题1:什么是关键字服务,获取,扩展?他们在这做什么? 问题2:为什么单独激活定义_trackPage?为什么不把重新安排代码放在activate()本身?
基本上是要了解:https://emberway.io/applying-the-adapter-pattern-for-analytics-in-ember-js-apps-29448cbcedf3
答案 0 :(得分:0)
service是放置代码的地方,几乎可以在应用中的任何位置使用。为了使服务中的代码可用于您正在处理的脚本,请注入它。
get
是一个帮助程序,用于访问服务或Ember对象之类的东西。在最近的教程中,您将看到更像this.get('metrics')
的语法。请参阅docs here。
如果您愿意,可以将_trackPackage
代码放入activate
函数中。然而,activate是一个称为钩子的特殊功能,许多开发人员喜欢保持他们的路由挂钩,如风格原因尽可能短而甜。挂钩是一种特殊的功能,可以自动触发用户进入路线,退回等等。在整个灰烬中有很多类似的挂钩。
Extend是使用Ember CLI创建新文件时为您创建的Ember样板文件。基本上,当您创建路径时,您将扩展Ember的默认路由配置,属性和方法。所以有一些基本行为(比如激活钩子)被继承。
我建议您阅读有关对象和服务的Ember Guides部分以获取更多信息。