如何获取 Meteor 中模板的文件列表?
How to get a list of files to the template in Meteor?
meteor 的新手,我对整个 client/server 玩得很开心。超级好玩。
我想读取文件夹中所有文件的列表,然后将它们打印在模板上的 UI 上。它必须是可能的。这是代码。
js文件:
var availableFiles = [];
if (Meteor.isServer) {
var fs = Npm.require('fs');
availableFiles = fs.readdirSync(process.env.PWD + '/public/uploads');
console.log(availableFiles);
}
Router.map(function() {
this.route('home', {
path: '/',
template: 'home',
data: {files: availableFiles}
});
});
html 文件:
<template name="home">
{{#each data.files}}
{{this}}
{{/each}}
</template>
我试图将 fs 调用放在路由定义数据的函数中,但出现 "Npm is not defined" 错误。我不知道它是否应该这样组织,请记住,这里是新手。任何帮助将不胜感激。
我可能会使用反应数组 (http://reactivearray.meteor.com/) 和 Meteor 方法来执行此操作。类似于:
if (Meteor.isServer) {
var fs = Npm.require('fs');
Meteor.methods({
getFiles() {
return fs.readdirSync(process.env.PWD + '/public/uploads');
}
});
}
if( Meteor.isClient ) {
Template.home.onCreated( function() {
Template.instance().files = new ReactiveArray();
Meteor.call('getFiles', function(error, result) {
if( error ) {
console.log( error );
} else {
Template.instance().files = files.concat( result );
}
});
});
Template.home.helpers({
files() {
return Template.instance().files.array();
}
});
}
Router.map(function() {
this.route('home', {
path: '/',
template: 'home',
data: {files: availableFiles}
});
});
语法可能不完美,但应该能说明问题。您还需要将模板更改为 {{#each files}}
meteor 的新手,我对整个 client/server 玩得很开心。超级好玩。
我想读取文件夹中所有文件的列表,然后将它们打印在模板上的 UI 上。它必须是可能的。这是代码。
js文件:
var availableFiles = [];
if (Meteor.isServer) {
var fs = Npm.require('fs');
availableFiles = fs.readdirSync(process.env.PWD + '/public/uploads');
console.log(availableFiles);
}
Router.map(function() {
this.route('home', {
path: '/',
template: 'home',
data: {files: availableFiles}
});
});
html 文件:
<template name="home">
{{#each data.files}}
{{this}}
{{/each}}
</template>
我试图将 fs 调用放在路由定义数据的函数中,但出现 "Npm is not defined" 错误。我不知道它是否应该这样组织,请记住,这里是新手。任何帮助将不胜感激。
我可能会使用反应数组 (http://reactivearray.meteor.com/) 和 Meteor 方法来执行此操作。类似于:
if (Meteor.isServer) {
var fs = Npm.require('fs');
Meteor.methods({
getFiles() {
return fs.readdirSync(process.env.PWD + '/public/uploads');
}
});
}
if( Meteor.isClient ) {
Template.home.onCreated( function() {
Template.instance().files = new ReactiveArray();
Meteor.call('getFiles', function(error, result) {
if( error ) {
console.log( error );
} else {
Template.instance().files = files.concat( result );
}
});
});
Template.home.helpers({
files() {
return Template.instance().files.array();
}
});
}
Router.map(function() {
this.route('home', {
path: '/',
template: 'home',
data: {files: availableFiles}
});
});
语法可能不完美,但应该能说明问题。您还需要将模板更改为 {{#each files}}