这个非常简单的应用程序无效。我的清单没有显示出来。为什么?我一定错过了关于Meteor如何工作的重要信息。
recipes.html
<body>
<h3>Recipes</h3>
{{> recipes}}
</body>
<template name="recipes">
<ul>
{{#each recipes}}
<li>{{name}}</li>
{{/each}}
</ul>
</template>
recipes.coffee
Recipes = new Meteor.Collection("recipes")
if Meteor.is_client
Meteor.startup ->
Meteor.autosubscribe(->
Meteor.subscribe('recipes')
)
# THIS IS NOT WORKING
Template.recipes.recipes ->
return Recipes.find()
if Meteor.is_server
Meteor.startup ->
if Recipes.find().count() == 0
data = [
name: "Chocolate Chip Cookies"
,
name: "Spring Rolls"
]
for item in data
Recipes.insert(item)
Meteor.publish('recipes', ->
return Recipes.find()
)
错误
Uncaught TypeError: Object function (data) {
var getHtml = function() {
return raw_func(data, {
helpers: partial,
partials: Meteor._partials
});
};
var react_data = { events: (name ? Template[name].events : {}),
event_data: data,
template_name: name };
return Meteor.ui.chunk(getHtml, react_data);
} has no method 'recipes'
我尝试使用autopublish而没有。我在这里不理解什么?
修改
我之前发布了错误的代码,正如Jasd指出的那样。现在的代码是有问题的代码。
答案 0 :(得分:1)
不应该是:
Template.recipes.recipes = ->
return Recipes.find()
因为1.)你将函数分配给Template.recipes.recipes
和2.)你遍历模板recipes
的列表recipes
。使用密钥recipes
我不需要返回另一个对象。
答案 1 :(得分:0)
应该是这个 -
Recipes = new Meteor.Collection("recipes")
if Meteor.is_client
Meteor.startup ->
Meteor.autosubscribe(->
Meteor.subscribe('recipes')
)
# OUTINDENT
# ASSIGNMEMT, NOT FUNCTION CALL
Template.recipes.recipes = ->
return Recipes.find()
if Meteor.is_server
Meteor.startup ->
if Recipes.find().count() == 0
data = [
name: "Chocolate Chip Cookies"
,
name: "Spring Rolls"
]
# INDENT
for item in data
Recipes.insert(item)
Meteor.publish('recipes', ->
return Recipes.find()
)
答案 2 :(得分:0)
您需要确保分配到Template.recipe.recipes
(可能是您qn中的拼写错误)
Template.recipes.recipes = ->
return Recipes.find()
您不希望在评估模板后运行的Meteor.startup
执行此操作(因此它会认为Template.recipe.recipes
为null
) - 将其移至is_client
区块的顶层,我认为一切都会好的。