Javascript 如何在Meteor中进行简单的数据库查询
每次我对一个应用程序有了新的想法,我就从Meteor开始。每次我用了别的东西。我认为这归结于我不知道如何做一个简单的数据库查询 这里有一个假设的例子。我想制作一个应用程序,用户在框中键入内容,按下按钮,然后显示他们键入的任何内容的图像。它使用一些图像搜索apiJavascript 如何在Meteor中进行简单的数据库查询,javascript,mongodb,meteor,meteorite,database,Javascript,Mongodb,Meteor,Meteorite,Database,每次我对一个应用程序有了新的想法,我就从Meteor开始。每次我用了别的东西。我认为这归结于我不知道如何做一个简单的数据库查询 这里有一个假设的例子。我想制作一个应用程序,用户在框中键入内容,按下按钮,然后显示他们键入的任何内容的图像。它使用一些图像搜索api <template name="image"> <input type="text" class="description"></input> <button class="sho
<template name="image">
<input type="text" class="description"></input>
<button class="showImage"></button>
<img src="{{img}}"></img>
</template>
太好了!那还不算太坏。但现在要将数据发送回客户端
//server.js
Meteor.publish("image", function(query) {
Images.find({q: query});
}
但是等等。我们不能只在客户端加载时订阅,因为我们还不知道查询。因此,事件处理程序可能需要
Template.image.events({
'click .showImage': function() {
addToDB($('.description').val());
Deps.autorun(function() {
Meteor.subscribe("images", $('.description').val());
});
}
});
好的,让我们把它输入到模板中
Template.image.img = function() {
return Images.findOne().imgsrc;
}
不,这会导致一个错误,因为当第一次加载模板时,我们还没有订阅图像。因此,我们可以像这样更新模板:
<template name="image">
<input type="text" class="description"></input>
<button class="showImage"></button>
{{#each info}}
<img src="{{info.img}}"></img>
{{/each}}
</template>
瞧
今天晚上,我花了比我愿意承认的时间更长的时间跌跌撞撞地经历了这一切。如果它只是普通的旧节点,我可以使用一些简单的jQuery
但是Meteor有一百万个惊人的特性,我真的很想利用它们。所以我希望有人能给我指路。在这个过程中,我犯了什么错误?在最后的结果中,我犯了什么错误?在meteor应用程序中实现这一点的最好、最干净、最简单的方法是什么
这是如此复杂,在一个使许多其他事情变得如此简单的框架内。那么,我怎样才能进行一个简单的数据库查询呢?请考虑查看他们提供的meteor示例。所有示例都具有获取用户输入、管理集合以及向模板显示集合查询的功能 大多数代码看起来都不错,但您同时提出了几个问题,并且从一个难以回答的角度出发。一些一般性说明:
- 考虑使用会话来保存用户通过事件设置的变量李>
- 通过将会话变量传递给Deps.autorun函数,订阅所需的数据
- 通过向模板传递会话变量来显示所需的数据
- 基本javascript规则仍然适用-
是一个错误。一个方便的模式是null。someThingIWant
返回something&&something.somethingingiwant代码>
上面代码中的一个问题是发布没有返回查询结果。我想这是一个打字错误。谢谢,这就是我一直在寻找的答案。会话变量和最后一种模式是我没有想到的。@fnsjdnfksjdb:记住向上投票,如果答案对你有帮助,就接受它!
<template name="image">
<input type="text" class="description"></input>
<button class="showImage"></button>
{{#each info}}
<img src="{{info.img}}"></img>
{{/each}}
</template>
Template.image.info = function() {
return Images.find({}, {limit: 1});
}