1

这个非常简单的应用程序不起作用。我的列表没有显示。为什么?我一定错过了有关 Meteor 工作原理的重要信息。

食谱.html

<body>
    <h3>Recipes</h3>
    {{> recipes}}
</body>

<template name="recipes">
    <ul>
        {{#each recipes}}
            <li>{{name}}</li>
        {{/each}}
    </ul>
</template>

食谱.咖啡

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' 

我已经尝试过使用自动发布和不使用此功能。我在这里不明白什么?

编辑:

正如 Jasd 指出的那样,我之前发布了错误的代码。现在的代码就是有问题的代码。

4

3 回答 3

1

不应该是:

Template.recipes.recipes = ->
    return Recipes.find()

因为 1.) 您函数分配给Template.recipes.recipes2.) 您遍历recipes模板列表recipesrecipes我猜你不需要用键返回另一个对象。

于 2012-08-10T17:00:08.920 回答
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()
    )
于 2012-08-11T05:22:46.490 回答
0
  1. 您需要确保分配给Template.recipe.recipes(可能是您的 qn 中的错字)

    Template.recipes.recipes = ->
      return Recipes.find()
    
  2. 您不想在 中执行此操作,在Meteor.startup评估模板之后运行(因此它会认为Template.recipe.recipesnull) - 将其移动到块的顶层is_client,我认为它会很好。

于 2012-08-11T05:22:59.483 回答