流星:从文件导入降价
Meteor: import markdown from file
我已经在 Meteor 上安装了 markdown 包:
meteor add markdown
并测试成功:
<body>
{{#markdown}}
#Hello world!#
{{/markdown}}
</body>
好的!
现在我想从文件中导入降价,我尝试过这种方式:
if (Meteor.isClient) {
Session.set("markdown_data","MDFile.md");
Template.myTemplate.helpers({
markdown_data: function() {
return Session.get("markdown_data");
}
});
}
并且在 html 中:
<body>
{{#markdown}}{{{markdown_data}}}{{/markdown}}
</body>
但是没有出现,无论是在网页上还是在网络控制台或终端上。
我哪里错了?
更新 - 工作代码
if (Meteor.isClient) {
Markdown = new Mongo.Collection("markdown");
Template.myTemplate.helpers({
markdown_data: function() {
var markdown = Markdown.findOne();
return markdown && markdown.data;
}
});
}
if (Meteor.isServer) {
Markdown = new Mongo.Collection("markdown");
Meteor.startup(function () {
if(Markdown.find().count()===0){
Markdown.insert({
data: Assets.getText("teamProgramming.md")
});
}
});
}
这样不行,你应该把你的markdown文件放在private目录下,作为资源服务器端加载,然后使用集合发送给客户端:
private/MDFile.md
#Hello world!#
lib/collections/markdown.js
Markdown=new Mongo.Collection("markdown");
server/startup.js
Meteor.startup(function(){
if(Markdown.find().count()===0){
Markdown.insert({
data: Assets.getText("MDFile.md");
});
}
});
server/collections/markdown.js
Meteor.publish(function(){
return Markdown.find();
});
client/views/main.html
<body>
{{#markdown}}
{{markdownData}}
{{/markdown}}
</body>
client/views/main.js
Template.body.helpers({
markdownData:function(){
var markdown=Markdown.findOne();
return markdown && markdown.data;
}
});
没有数据库也可以做的更优雅。仅使用 Meteor 方法。
假设您的 /private
文件夹中有 test.md
markdown 文件
在server/methods.js
Meteor.methods({
'getMarkdown'(markdownFile) {
return Assets.getText(markdownFile);
}
});
在client/helpers.js
Template.registerHelper('getMarkdown', (markdownFile) => {
// if there is first no empty line in markdownFile
// meteor's markdown helper renders <h1> as <pre>
return '\n' + ReactiveMethod.call('getMarkdown', markdownFile);
});
为了从助手调用流星方法,我使用了这个 solution Is it a bad idea 中的包 simple:reactive-method
来从助手调用流星方法?我希望不是在这种情况下(这简化了 *md 文件的加载)
终于在你的一些模板中了
<template name="loadMarkdown">
{{#markdown}}
{{getMarkdown 'test.md'}}
{{/markdown}}
</template>
我已经在 Meteor 上安装了 markdown 包:
meteor add markdown
并测试成功:
<body>
{{#markdown}}
#Hello world!#
{{/markdown}}
</body>
好的!
现在我想从文件中导入降价,我尝试过这种方式:
if (Meteor.isClient) {
Session.set("markdown_data","MDFile.md");
Template.myTemplate.helpers({
markdown_data: function() {
return Session.get("markdown_data");
}
});
}
并且在 html 中:
<body>
{{#markdown}}{{{markdown_data}}}{{/markdown}}
</body>
但是没有出现,无论是在网页上还是在网络控制台或终端上。
我哪里错了?
更新 - 工作代码
if (Meteor.isClient) {
Markdown = new Mongo.Collection("markdown");
Template.myTemplate.helpers({
markdown_data: function() {
var markdown = Markdown.findOne();
return markdown && markdown.data;
}
});
}
if (Meteor.isServer) {
Markdown = new Mongo.Collection("markdown");
Meteor.startup(function () {
if(Markdown.find().count()===0){
Markdown.insert({
data: Assets.getText("teamProgramming.md")
});
}
});
}
这样不行,你应该把你的markdown文件放在private目录下,作为资源服务器端加载,然后使用集合发送给客户端:
private/MDFile.md
#Hello world!#
lib/collections/markdown.js
Markdown=new Mongo.Collection("markdown");
server/startup.js
Meteor.startup(function(){
if(Markdown.find().count()===0){
Markdown.insert({
data: Assets.getText("MDFile.md");
});
}
});
server/collections/markdown.js
Meteor.publish(function(){
return Markdown.find();
});
client/views/main.html
<body>
{{#markdown}}
{{markdownData}}
{{/markdown}}
</body>
client/views/main.js
Template.body.helpers({
markdownData:function(){
var markdown=Markdown.findOne();
return markdown && markdown.data;
}
});
没有数据库也可以做的更优雅。仅使用 Meteor 方法。
假设您的 /private
文件夹中有 test.md
markdown 文件
在server/methods.js
Meteor.methods({
'getMarkdown'(markdownFile) {
return Assets.getText(markdownFile);
}
});
在client/helpers.js
Template.registerHelper('getMarkdown', (markdownFile) => {
// if there is first no empty line in markdownFile
// meteor's markdown helper renders <h1> as <pre>
return '\n' + ReactiveMethod.call('getMarkdown', markdownFile);
});
为了从助手调用流星方法,我使用了这个 solution Is it a bad idea 中的包 simple:reactive-method
来从助手调用流星方法?我希望不是在这种情况下(这简化了 *md 文件的加载)
终于在你的一些模板中了
<template name="loadMarkdown">
{{#markdown}}
{{getMarkdown 'test.md'}}
{{/markdown}}
</template>