gpt4 book ai didi

javascript - Meteor.js 将项目从一个集合移动到另一个集合

转载 作者:行者123 更新时间:2023-11-30 16:27:13 26 4
gpt4 key购买 nike

所以我正在尝试为学校项目制作一个 Grocery List 应用程序。我想要的是让用户能够列出元素,然后当他们找到元素时将它们移至“找到的元素”列表,同时输入元素的销售价格。我有两个 Mongo 集合“Items”用于他们正在寻找的项目,“Found_items”用于他们找到的项目。我在将项目从 Items 移动到 Found_items 时遇到问题。它们确实从 Items 中移除,但似乎没有被放入 Found_items,或者至少它们没有出现在 UI 上。我很确定他们的问题出在您单击“找到”按钮时发生的事情中。我的代码如下...

项目.html

<head>
<title>Grocery List</title>
</head>

<body>
<div class="container">
<header>
<h1>Grocery List</h1>

<form class="new-item">
<input type="text" name="text" placeholder="Type to add new items" />
</form>
</header>

<ul>
{{#each items}}
{{> item}}
{{/each}}
</ul>
</div>
<div class="container">
<header>
<h1>Items Found</h1>
</header>

<ul>
{{#each found_items}}
{{> found}}
{{/each}}
</ul>
</div>
</body>

<template name="item">
<li>
<button class="found">Got it!</button>

<input type="number" name="price" placeholder="Sale Price" />

<span class="text">{{text}}</span>
</li>
</template>

<template name="found">
<li>
<span class="text">{{text}}</span>
</li>
</template>

项目.js

Items = new Mongo.Collection("items");
Found_items = new Mongo.Collection("found_items");

if (Meteor.isClient) {
// This code only runs on the client
Template.body.helpers({
items: function () {
return Items.find({});
},
found_items: function () {
return Found_items.find({});
}
});


Template.body.events({
"submit .new-item": function (event) {
event.preventDefault();

var text = event.target.text.value;

Items.insert({
text: text
});

event.target.text.value = "";
}
});

Template.item.events({
"click .found": function (event) {
Items.remove(this._id);

event.preventDefault();

var price = event.target.price.value;
var text = event.target.text.value;

Found_items.insert({
text: text,
price: price
});

}
});
}

任何关于我做错了什么的解释将不胜感激。

最佳答案

唯一的问题是您的“click .found”处理程序,因为 event.target 是按钮,它没有 pricetext 属性。

将其更改为:

Template.item.events({
"click .found": function (event) {

event.preventDefault();
var price = Template.instance().find('[name="price"]').value;
var text = Template.instance().find('.text').textContent;

Items.remove(this._id);
Found_items.insert({
text: text,
price: price
});

事件处理程序还传递了两个参数,事件对象和定义处理程序的模板实例。所以你可以把它改成:

Template.item.events({
"click .found": function (event, template) {
event.preventDefault();
var price = template.find('[name="price"]').value;
var text = template.find('.text').textContent;

...

});

因为 this 包含用于创建此(项目)模板的数据上下文,您可以进一步简化为:

"click .found": function (event, template) {
this.price = template.find('[name="price"]').value;
Items.remove(this._id);
Found_items.insert(this);
}

event.preventDefault() 也已被删除,因为没有默认操作来阻止此目标(您的其他事件需要它,作为表单 submit 事件)。

关于javascript - Meteor.js 将项目从一个集合移动到另一个集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33928562/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com