我有一個項目使用Meteor.js和鐵路:路由器。在我進行任何路由之前,我的應用只是一個頁面,我的表單和按鈕都工作得很好,但現在我已經路由到多個工作頁面,我的表單和按鈕似乎不是「可點擊的」。 「數據庫中已有的所有內容都會加載並渲染,但現在我無法從應用程序中添加/刪除/更改數據。Meteor.js與鐵路由器按鈕和模板中的表格不工作
下面是HTML:
<template name="home">
<title>Grocery List</title>
<div>
<ul class="menu">
<li class="menuItem">{{> loginButtons}}</li>
<li class="menuItem"><a href="{{ pathFor 'home'}}" class="menuLink">Home</a> </li>
<li class="menuItem"><a href="{{ pathFor 'saved'}}" class="menuLink">Saved Lists</a></li>
<li class="menuItem"><a href="{{ pathFor 'about'}}" class="menuLink">About</a></li>
</ul>
</div>
{{#if currentUser}}
<div class="container">
<header>
<h1 id="title">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>
<div class="container">
<header>
<h3>
Tax: ${{calcTax}}
</h3>
<h2>
Total: ${{priceSum}}
</h2>
<button class="save">Save list</button>
</header>
</div>
{{else}}
<div class="container">
<h3>Please log in first.</h3>
</div>
{{/if}}
</template>
<template name="about">
<title>About Grocery List</title>
<div>
<ul class="menu">
<li class="menuItem">{{> loginButtons}}</li>
<li class="menuItem"><a href="{{ pathFor 'home'}}" class="menuLink">Home</a> </li>
<li class="menuItem"><a href="{{ pathFor 'saved'}}" class="menuLink">Saved Lists</a></li>
<li class="menuItem"><a href="{{ pathFor 'about'}}" class="menuLink">About</a></li>
</ul>
</div>
<div class="container">
<header><h1>About</h1></header>
<p>This application can be used to make, save and update grocery lists. Once the user is in the store, they can use it to check off items on the list, put in the price and see the total, with tax.</p>
<p>Users can also save their previous lists to either reuse them, or compare current prices to previous ones.</p>
<p>Future implementations of this page would also allow the user to change the tax rate depending on their location, and include coupons and other discounts in the pricing.</p>
<h3>
Coding Environments
</h3>
<ul>
<li>IntelliJ IDEA</li>
</ul>
<h3>
Frameworks
</h3>
<ul>
<li>Meteor</li>
<li>Iron Router</li>
</ul>
<h3>
Languages
</h3>
<ul>
<li>HTML</li>
<li>CSS</li>
<li>Javascript</li>
</ul>
</div>
</template>
<template name="saved">
<title>Saved Lists</title>
{{#if currentUser}}
<div>
<ul class="menu">
<li class="menuItem">{{> loginButtons}}</li>
<li class="menuItem"><a href="{{ pathFor 'home'}}" class="menuLink">Home</a> </li>
<li class="menuItem"><a href="{{ pathFor 'saved'}}" class="menuLink">Saved Lists</a></li>
<li class="menuItem"><a href="{{ pathFor 'about'}}" class="menuLink">About</a></li>
</ul>
</div>
<div class="container">
<header><h1>Your Saved Lists</h1></header>
<ul>
{{#each saved_items}}
{{> save}}
{{/each}}
</ul>
</div>
{{else}}
<div class="container">
<h3>Please log in first.</h3>
</div>
{{/if}}
</template>
<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>
<button class="remove">×</button>
<span class="text">{{text}}</span>
<span class="price">{{price}}</span>
</li>
</template>
<template name="save">
<li>
<span class="text">{{text}}</span>
</li>
</template>
這裏是JavaScript:
Items = new Mongo.Collection("items");
Found_items = new Mongo.Collection("found_items");
Saved_lists = new Mongo.Collection("saved_lists");
Router.route('home', {path: '/'}); // Add this route
Router.route('about', {path: '/about'});
Router.route('saved', {path: '/saved'});
if (Meteor.isClient) {
// This code only runs on the client
Template.home.helpers({
items: function() {
return Items.find({});
},
found_items: function() {
return Found_items.find({});
},
saved_items: function() {
return Saved_lists.find({});
},
priceSum: function(){
var userItems = Found_items.find({
userId: this._id
}).fetch();
var prices = _.pluck(userItems, "price");
var totalTaxed = _.reduce(prices, function(sum, price){
var total = sum + parseFloat(price);
return total + (total * 0.04712);
}, 0);
return totalTaxed.toFixed(2);
},
calcTax: function() {
var userItems = Found_items.find({
userId: this._id
}).fetch();
var prices = _.pluck(userItems, "price");
var tax = _.reduce(prices, function(sum, price){
return (sum + parseFloat(price)) * 0.04712;
}, 0);
return tax.toFixed(2);
}
});
Template.home.events({
"submit .new-item": function (event) {
event.preventDefault();
var text = event.target.text.value;
Items.insert({
text: text,
createdAt: new Date(),
owner: Meteor.userId(),
username: Meteor.user().username
});
event.target.text.value = "";
}
});
Template.item.events({
"click .found": function (event, template) {
event.preventDefault();
var price = template.find('[name="price"]').value;
var text = template.find('.text').textContent;
Items.remove(this._id);
Found_items.insert({
text: text,
price: price
});
}
});
Template.home.events({
"click .save": function(event) {
event.preventDefault();
var list = Found_items.find({
userId: this._id
}).fetch();
Saved_lists.insert(list);
}
});
Template.found.events({
"click .remove": function(event) {
event.preventDefault();
Found_items.remove(this._id);
}
});
Accounts.ui.config({
passwordSignupFields: "USERNAME_ONLY"
});
}
難道事情沒有解僱?有什麼症狀? –
這不是沒有發生的事件。就好像瀏覽器甚至不認識他們在那裏。例如,當我將鼠標懸停在文本字段上時,光標不會改變,當我點擊它時根本沒有任何反應。當我點擊一個按鈕時,通常看不到的按鈕外觀沒有變化。它幾乎就像是一個大的圖像而不是單獨的元素,但是當我使用瀏覽器檢查元素時,所有元素都在代碼中。 – cteeters