Javascript 流星中的自定义脚本
我刚开始玩流星,我测试了一些东西。基于这些,我在测试下面的代码,以了解编写包的最佳方法,但我从未成功过。下面的代码有什么问题,编写Meteor应用程序包的好方法是什么(如果不是全部,但至少有几个好方法),该程序包可以放在lib文件夹中 /lib/exports.js /lib/file1.js //mypackage.jsJavascript 流星中的自定义脚本,javascript,meteor,Javascript,Meteor,我刚开始玩流星,我测试了一些东西。基于这些,我在测试下面的代码,以了解编写包的最佳方法,但我从未成功过。下面的代码有什么问题,编写Meteor应用程序包的好方法是什么(如果不是全部,但至少有几个好方法),该程序包可以放在lib文件夹中 /lib/exports.js /lib/file1.js //mypackage.js bjse.api.Whirlygig = function (name) { var self = this; self.name = name; // name
bjse.api.Whirlygig = function (name) {
var self = this;
self.name = name; // name of the remote weasel
self.values = {}; // remote key name -> 0-indexed value
};
_.extend(Whirlygig.prototype, {
// Take a key/value pair from the remote Weasel and save it locally.
addValue: function (x) {
// Weasels use 1-indexed arrays. Subtract 1 to convert to 0-indexed.
self.values[x.key] = x.value - 1;
},
// Return a list of stored values in a format suitable for sending to
// a Weasel.
serialize: function () {
return _.map(self.values, function (v, k) {
var newVal = mungeValue(v, false /* foldValue */);
// Weasels use 1-indexed arrays. Add 1 to convert back to 1-indexed.
newVal = newVal + 1;
return {key: k, value: newVal};
});
}
});
/server/methods.js
但我得到了没有定义的旋转
更新
我想使用bjse作为名称空间,但它总是显示为未在其他文件中定义 在
导出中
您需要:
if (typeof(org) === 'undefined'){
var org = {}
}
if(typeof(bjse) === 'undefined'){
var bjse = {};
if(typeof exports != "undefined"){
bjse = exports;
}
bjse.api = {};
}
使其成为全局变量,并在package.js中使其在服务器上运行,您可以找到如何使其成为全局变量的更多信息?从Whirlywig中删除
var
。如果您想创建包,您可以使用我的simple lib来检查我是如何完成的,它非常简单,所以您应该毫无问题地阅读它-我不打算创建Atmosphere包,只是尝试从methods.js运行的小型自定义脚本。因此,我尝试如下导出if(bjse==void 0){bjse={};if(typeof exports!=“undefined”){bjse=exports;}bjse.api={};},但在方法中,我仍然看到即使在删除varNo之后,bjse也没有定义,我在Whirlygig之前没有var,甚至我先定义了名称空间,我仍然认为Whirlygig未定义。您无法将未定义的变量与任何东西进行比较(如果(org==void 0)),您必须比较它的类型我更改了导出与您建议的内容,但我仍然需要设置调试器以在file1.js上停止,并逐步检查它的中断位置。加载exports.js文件时,exports或module.exports是未定义的。因此,在删除下面的if(typeof exports!=“undefined”){bjse=exports;}并删除bjse之前的var之后,它就工作了。那么,有没有一种方法可以使用导出来实现呢?
Meteor.methods({
createConnections: function(){
....
var serializeObj = bjse.api.Whirlygig.serialize(..);
if (typeof(org) === 'undefined'){
var org = {}
}
if(typeof(bjse) === 'undefined'){
var bjse = {};
if(typeof exports != "undefined"){
bjse = exports;
}
bjse.api = {};
}