【问题标题】:Meteor - on button click retrieve single document from database and displayMeteor - 点击按钮从数据库中检索单个文档并显示
【发布时间】:2016-11-23 03:12:46
【问题描述】:

我正在尝试通过单击按钮从数据库中检索单个随机文档。当页面加载时,它确实得到一个文档并显示在网页上;但是当我尝试单击按钮以检索另一个随机文档并显示在网页上时,它不起作用。

问题是将对象传递给 html 文件。是的,我是 Meteor/模板系统的新手。

main.html

<body>
<ul>
   {{#each resolutions}}
    {{> resolution}}
   {{/each}}
</ul>
</body>

<template name="resolution">
<li>
<span class="text">{{question}}</span><br>
<button type="button" name="button" class="change-question">Change Question</button>
<br>
</li>
</template>

main.js

  Template.resolution.events({
'click .change-question': function(event, instance){

  var collection_size = Resolutions.find().count();
  var random = Math.floor(Random.fraction() * collection_size);
  // choose a random item by skipping N items
  var item = Resolutions.findOne({},{
    skip: random
  });
  var objArray = $.makeArray(item);

  instance.question.set(objArray);
// window.alert("sometext" + objArray);
}
});

  Template.body.helpers({
  resolutions: function() {
    var collection_size = Resolutions.find().count();
    var random = Math.floor(Random.fraction() * collection_size);
    // choose a random item by skipping N items
    var item = Resolutions.findOne({},{
      skip: random
    });
    var objArray = $.makeArray(item);
    return objArray;
  }
  });

错误消息显示“无法读取未定义的属性集”。

感谢任何帮助。

【问题讨论】:

    标签: node.js mongodb templates meteor


    【解决方案1】:

    您可以像这样使用反应变量: main.html

    <body>
    <ul>
       {{#each resolutions}}
        {{> resolution}}
       {{/each}}
    </ul>
    </body>
    
    <template name="resolution">
       <li>
          <span class="text">{{questionData}}</span><br>
          <button type="button" name="button" class="change-question">Change  Question</button>
         <br>
       </li>
    </template>
    

    main.js

    var questionData = new ReactiveVar(null);
    Template.resolution.rendered = function () {
        questionData.set(this.data);
    }
    Template.resolution.events({
        'click .change-question': function (event, instance) {
    
            var collection_size = Resolutions.find().count();
            var random = Math.floor(Random.fraction() * collection_size);
            // choose a random item by skipping N items
            var item = Resolutions.findOne({}, {
                skip: random
            });
            var objArray = $.makeArray(item);
    
            questionData.set(objArray);
            // window.alert("sometext" + objArray);
        }
    });
    Template.resolution.events({
        questionData: function () {
            if(questionData.get()) {
               return questionData.get().question;
            }
        }
    })
    Template.body.helpers({
        resolutions: function () {
            var collection_size = Resolutions.find().count();
            var random = Math.floor(Random.fraction() * collection_size);
            // choose a random item by skipping N items
            var item = Resolutions.findOne({}, {
                skip: random
            });
            var objArray = $.makeArray(item);
            return objArray;
        }
    });
    

    【讨论】:

    • 嗨,萨普纳。我试过了,它给了我一个不同的错误消息“instance.data.question.set”不是一个函数。
    • 你试过“instance.data.question = objArray”吗?
    • 你也可以选择反应变量。如果您愿意,我可以根据您的示例向您展示它的用法?
    • 嗨,萨普纳。如果你能给我一个 Reactive 的例子就好了。谢谢!
    • 嗨,Silvio,我已经更新了我的答案。请检查并告诉我。
    猜你喜欢
    • 2020-02-20
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多