服务,获得&在JavaScript中扩展以及如何使用它们

时间:2017-09-08 18:28:57

标签: javascript ember.js

我试图理解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

1 个答案:

答案 0 :(得分:0)

service是放置代码的地方,几乎可以在应用中的任何位置使用。为了使服务中的代码可用于您正在处理的脚本,请注入它。

get是一个帮助程序,用于访问服务或Ember对象之类的东西。在最近的教程中,您将看到更像this.get('metrics')的语法。请参阅docs here

如果您愿意,可以将_trackPackage代码放入activate函数中。然而,activate是一个称为钩子的特殊功能,许多开发人员喜欢保持他们的路由挂钩,如风格原因尽可能短而甜。挂钩是一种特殊的功能,可以自动触发用户进入路线,退回等等。在整个灰烬中有很多类似的挂钩。

Extend是使用Ember CLI创建新文件时为您创建的Ember样板文件。基本上,当您创建路径时,您将扩展Ember的默认路由配置,属性和方法。所以有一些基本行为(比如激活钩子)被继承。

我建议您阅读有关对象和服务的Ember Guides部分以获取更多信息。