首先 - 我很难制定这个问题,所以请耐心等待,并要求澄清,我会尽力提供。我刚开始学习流星,请耐心等待。
我有几个输入可以在人们输入时立即保存。 (稍微延迟300毫秒,不会使数据库过载)。
基本上,在“keyup”上,它会继续保存。一切正常。但是,当数据库实际存储他们键入的内容时,我想添加一个可视指示符(比如绿色复选标记或微小的“已保存”)。
图形:
[___________________]
[输入内容_____](保存)
[___________________]
我不知道该如何解决这个问题,但这很常见,你们已经做了很多事情。如果我不关心数据库反馈,我只使用JQuery,在输入旁边定位一个类,并在键盘后使复选标记或单词可见,或将其添加到DOM。相当直接。只有当我确定它已存储在Mongodb部分时才会让我感到困惑。
任何帮助都会很高兴。 谢谢
附录代码:
Template.dibs.events({
'keyup input.name': _.throttle(function(event) {
Dibs.update(this._id, {$set: {name: event.target.value}});
$(':focus + .glyphicon-ok').css('opacity',1);
}, 300),
您能解释一下您在何处/如何添加代码? (对于微调器或单词)。 来自JQuery我做了一些我知道不正确的方法。这是在客户端部分(我只知道演示代码,并不安全),但我想知道利用流星的最佳方式。我已经有复选标记表明它已保存在页面中,但它们都是隐藏的,这些代码只是让它们在字段的keyup上可见。
我读完了这篇文章,并没有完全看到我如何进行中间步骤(微调器等),然后保存代码后的最终复选标记。我也正在阅读新的1.0教程(这很棒),但我仍然缺少视觉指标。如果它在服务器中失败以反映它没有保存,那么meteor更新UI真是太好了,因为我假设成功,我不认为利用Meteor.Error是有道理的。如果没有Meteor.Success或同等的?
再一次,我为长篇大论道歉,我正试图围绕这一点,因为这项技术看起来很有希望
答案 0 :(得分:0)
欢迎来到流星!事实上,Meteor通过一种称为延迟补偿的机制设计(除其他外)以处理这种情况。您可以在Meteor.methods了解更多相关信息。
在服务器上调用方法需要通过网络进行往返。如果用户不得不等待一秒钟才能看到他们的评论由于这种延迟而出现,那将是非常令人沮丧的。这就是为什么Meteor有一个名为方法存根的功能。如果在客户端上使用与服务器方法同名的方法定义方法,Meteor将运行它以尝试预测服务器方法的结果。当服务器上的代码实际完成时,客户端上生成的预测将替换为服务器方法的实际结果。
您可以通过定义Meteor方法将输入文本保存到数据库来使用延迟补偿,客户端存根显示一个微调器而不是“已保存”,并在成功调用其回调时“保存”。
或者,您可以直接调用集合上的update
method,并在客户端上添加一个回调,在服务器方法返回后将使用(error, numberOfDocsUpdated)
调用。
详细了解when to use Meteor methods and when to use client-side operations。
答案 1 :(得分:0)
正如Dan所说,Latency Comp需要这样做。另一种方法是在模板事件中。您可以使用文本字段的内容在keyup上设置会话变量,并在帮助程序中设置一个标志,该标志将在会话变量和当前用户输入匹配时呈现复选标记。