我需要动态帮助器来获取游标。这意味着,用户可以更改集合 - 通过单击事件 - 用于获取列表。
但是在console.log
我的undefined
获得了window[type]
。我做错了什么?
因此article.find()
可行,但window[type]
不...
进口/ API /示例/ index.js
export const article = new Mongo.Collection('articles');
export const images = new Mongo.Collection('images');
进口/ API /示例/客户端/ example.js
import { article, images } from '../';
Template.example.helpers({
list() {
const type = Template.instance().section.get();
console.log(type, window[type]); // result: 'article', undefined
return window[type].find(); // <- therefore this is NOT working
}
});
Template.example.onCreated(function() {
this.section = new ReactiveVar('article');
});
Template.example.events({
'click .target': function(event, template) {
const $this = $(event.currentTarget),
type = $this.attr('data-type');
template.section.set(type);
}
});
答案 0 :(得分:1)
这违背了Python的禅宗(“明确比隐含更好”),但这里有足够的合理性。
您可以使用import * as name from "module-name"
变量来获取所有集合(前提是它们是从该文件导出的唯一内容,否则应该是显式的)。
import * as collections from '../index'; //collections includes all of your collections
Template.example.helpers({
list() {
const type = Template.instance().section.get();
return collections[type].find();
}
});
可以得到你想要的东西。
答案 1 :(得分:0)
window
对象只包含全局变量作为属性。
但是,JavaScript模块隐式赋予变量绑定的范围。并且,只有全局范围可以自动作为变量访问。
您可以使用括号语法object[property]
,但您需要建立包含article
和images
的其他对象。
import { article, images } from '../';
const collections = { article, images };
// ...
或者,您可以使用import * as name
导入所有已命名的导出:
import * as collections from '../';
// ...
然后,使用该对象按type
查找:
Template.example.helpers({
list() {
const type = Template.instance().section.get();
console.log(type, collections[type]);
return collections[type].find();
}
});