使用CoinsManager,我有一个模板目录,每个文件都有一个类,我想阅读并列出我的集合转换方法中的所有文件,用正确的类初始化我的文档。
服务器/ methods.coffee :
Meteor.methods
implemented_coins: ->
"""
Returns a list of coins that have been implemented
"""
files = fs.readdirSync './app/models/cryptos/'
file.replace(".coffee.js", "") for file in files.filter (file) ->
file.search("(base_crypto*)|(js.map)") == -1
集合/ addresses.coffee :
if Meteor.isReady
@implementedCoins = Meteor.call "implemented_coins"
@Addresses = new Meteor.Collection "addresses",
transform: (doc) ->
# Retrieve class from code, and pass it the address
if doc.code in @implementedCoins
new @[doc.code] doc.address
else doc
客户端/视图/地址/ addresses_list.coffee
Template.userAddresses.helpers
userAddresses: ->
addresses = Addresses.find
userId: Meteor.user()._id
address.set_balance() for address in addresses
return addresses
现在,我在客户端控制台上收到以下错误:
Exception from Deps recompute: TypeError: Array.prototype.indexOf called on null or undefined
at indexOf (native)
at Addresses.Meteor.Collection.transform
这意味着在我的集合转换中,@implementedCoins
变量未定义,因为我没有正确实现它。
知道如何解决这个问题吗?
答案 0 :(得分:1)
我很确定这是错误的:
if Meteor.isReady
@implementedCoins = Meteor.call "implemented_coins"
我不认为Meteor
中有一个字段具有该名称,即使它是,但它会在启动时执行,但那时isReady
可能是假的,所以你的变量没有设置。你是说Meteor.startup
吗?其次,在客户端上,您需要使用call
的回调,因为客户端上没有光纤。
这会改变吗?
Meteor.startup(function () {
Meteor.call("implemented_coins", function(err, res) {
implementedCoins = res;
});
});