javascript – Meteor JS:如何将文档插入集合中,但仅限于客户端?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – Meteor JS:如何将文档插入集合中,但仅限于客户端?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2493字,纯文字阅读大概需要4分钟。
内容图文
![javascript – Meteor JS:如何将文档插入集合中,但仅限于客户端?](/upload/InfoBanner/zyjiaocheng/794/ba6acb61c6f24a3b991964c6c971b27d.jpg)
我是Meteor的新手,并构建了一个简单的应用程序来学习框架.我正在构建的应用程序让你在小猫的图像上放置文字.
期望的行为是这样的:
用户单击小猫的任何位置,并且出现一个允许用户输入文本的可信元素.单击元素外部可以保存元素,并保留在原位.
我遇到的问题:
如果我在应用程序中打开了两个浏览器窗口,并且在一个窗口中单击一只小猫,则两个窗口中都会显示一个空白字段.理想情况下,空字段仅出现在我单击的窗口上.保存一个单词后,应该在两个窗口中都可以看到.
我的问题:
有没有办法只在客户端将文档插入到集合中,然后使用upsert将文档添加到servert-side集合?
这是我试过的:
我创建了一个存根方法,该方法仅存在于客户端以插入文档.这个问题是,当我点击图像时,会出现一个空白字段,持续一秒钟,然后再次消失.
这是代码:
图像tags.js
if (Meteor.isClient) {
var isEditing;
Template.image.image_source = function () {
return "http://placekitten.com/g/800/600";
};
Template.tag.rendered = function(){
var tag = this.find('.tag');
if (isEditing && !tag.innerText) {
tag.focus();
}
}
Template.image.events({
'click img' : function (e) {
if (isEditing) {
isEditing = false;
} else {
isEditing = true;
var mouseX = e.offsetX;
var mouseY = e.offsetY;
// Tags.insert({x:mouseX, y:mouseY});
// Insert tag on the client-side only.
// Upsert later when the field is not empty.
Meteor.call('insertTag', {x:mouseX, y:mouseY});
}
},
'click .tag' : function (e) {
isEditing = true;
},
'blur .tag' : function (e) {
var currentTagId = this._id;
var text = e.target.innerText;
if(text) {
Tags.upsert(currentTagId, {$set: {name: text}});
} else {
Tags.remove(currentTagId);
}
}
});
Template.image.helpers({
tags: function() {
return Tags.find();
}
});
// Define methods for the collections
Meteor.methods({
insertTag: function(attr) {
Tags.insert({x:attr.x, y:attr.y});
}
});
}
// Collections
Tags = new Meteor.Collection('tags');
图像tags.html
<head>
<title>Image Tagger</title>
</head>
<body>
{{> image}}
</body>
<template name="image">
<figure>
<img src="{{image_source}}" />
<figcaption class="tags">
{{#each tags}}
{{> tag}}
{{/each}}
</figcaption>
</figure>
</template>
<template name="tag">
<div class="tag" contenteditable style="left: {{x}}px; top: {{y}}px;">
{{name}}
</div>
</template>
解决方法:
您应该在Session中存储临时标记(可能还有您的isEditing var):
Session.set("isEditing", true);
Session.set("newTag", {x:mouseX, y:mouseY});
您还可以通过在初始化时传递null而不是集合名称来创建本地集合.但是,Session应该适用于你正在做的事情.查看leaderboard的示例.
编辑:
<figcaption class="tags">
{{#each tags}}
{{> tag}}
{{/each}}
{{#with newTag}}
{{> tag}}
{{/with}}
</figcaption>
Template.image.newTag = function() {
return Session.get("newTag");
}
内容总结
以上是互联网集市为您收集整理的javascript – Meteor JS:如何将文档插入集合中,但仅限于客户端?全部内容,希望文章能够帮你解决javascript – Meteor JS:如何将文档插入集合中,但仅限于客户端?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。