-1

所以这是我的问题:目前,我在模板 js 文件中有十几个与 WEBRTC 相关的函数。我的目标是将这些函数放在一个单独的文件中,例如称为 webRTCWrapper.js,并在我的模板中调用这些函数而不使用全局变量。

我想我必须使用命名空间,对吗?如果是这样,你如何使用它们?

编辑:对于任何感兴趣的人,这正是我想要的:

http://themeteorchef.com/snippets/using-the-module-pattern-with-meteor/

4

3 回答 3

1

您可以使用具有全局对象和该对象内的函数的通用模式。

Greetings = {
   hello: function(name) { return "Hello "+name+" how are you?"; }
}

然后你可以在模板助手中调用它:

Template.GreetingsTemplate.helpers({
   sayHello: function() { return Greetings.hello('Maxence'); }
})

注意 Meteor 中文件的加载顺序,lib 文件夹中的任何内容都会先加载。如果您遇到未定义“Greetings”对象的问题,那是因为该文件尚未加载。

编辑:您可以重复使用相同的模式在不同的文件中添加更多功能(您可以使用 App = App || {} 但它会在 Chrome 中引发错误)。

App = (typeof App === 'undefined')? {} : App;
App.someFunction = function(){};

甚至,如果您使用 underscore.js:

App = (typeof App === 'undefined')? {} : App;
_.extend(App, {
  someFunction: function(){}
});
于 2015-09-25T12:34:28.497 回答
1

创建一个与您的目录packages/并行的.meteor/目录。您可以创建一个导出单个对象/函数的包。在命令行中,使用meteor create --package <yourpackagename>meteor add <yourpackagename>可以编辑 js 文件来添加命名空间。

MyNamespace = {};
MyNamespace.myFunction = function () { };

然后,在 package.js 中,简单地导出该命名空间。

api.export('MyNamespace');
于 2015-09-25T13:04:57.100 回答
0

从现在开始,使用另一个文件中的代码的常规方法是通过全局(服务器和客户端)。正如 Joao 建议的那样,您可以创建自己的全局App变量,您将在其中存储或更通用的全局MODULE变量(基本上与 Joao 相同的解决方案,但有解释)。

但是随着 ES2015 支持的到来,我们很快就能有一个官方模式来实现这一点。然而,由于 1.2还不支持导入/导出语法:

Note, The ES2015 module syntax (import/export) is not supported yet in Meteor 1.2.

如果您想更早开始使用这些功能,我建议您使用这个包,它是填补当前导入/导出空白的临时解决方案,meteor 团队开发目前正在寻找一个优雅的解决方案来支持这一点。

于 2015-09-25T13:04:29.323 回答