gpt4 book ai didi

javascript - meteor ,如何更改事件模板( View )?

转载 作者:数据小太阳 更新时间:2023-10-29 05:12:19 26 4
gpt4 key购买 nike

我正在构建一个有两个 View 的应用:主页和 View 列表

当用户在主页 View 上点击列表名称时,它应该更改为“ View 列表”模板。我添加了一个名为“view”的 session 变量,在启动时将其设置为“home”。当在主屏幕上的其中一项(列表名称)上检测到单击事件时,它将 View 的值更改为“viewList”。然后在 HTML 中,如果“view”是“home”,我有一个 if 语句来显示 home 模板,否则显示“viewList”模板。

我可以看出第一部分是有效的,因为我正在输出“view”的值,并且当您单击列表名称时它会输出值“viewList”,只是不会更改模板。

我错过了什么?

我的代码:

我的列表.js:

Lists = new Mongo.Collection("lists");

if (Meteor.isClient) {
Meteor.startup( function() {
Session.set("view", "home");
});

Template.main.helpers({
view: function () {
return Session.get("view");
}
});

Template.home.helpers({
lists: function () {
return Lists.find({}, {sort: {lastUsed: -1}});
}
});

Template.home.events({
"submit #new-list": function (event) {
var name = event.target.listName.value;
Lists.insert ({
name: name,
createdAt: new Date(),
lastUsed: new Date()
});
},
"click .list-row": function (event) {
Session.set("view", "viewList");
}
});
}

我的列表.html:

<head>
<title>My Lists</title>
</head>

<body>
{{> main}}
</body>

<template name="main">
{{view}}
{{#if view "home"}}
{{> home}}
{{else}}
{{> viewList}}
{{/if}}
</template>

<template name="home">
<header>
<h2>My Lists</h2>
</header>
<ul id="lists">
<li>
<form id="new-list">
<input type="text" name="listName" value="My List 1">
<input type="submit" value="Save">
</form>
</li>
{{#each lists}}
{{> list}}
{{/each}}
</ul>
</template>

<template name="viewList">
<header>
<h2>View List</h2>
</header>
<!-- list details will show here -->
</template>

<template name="list">
<li class="list-row" id="{{_id}}">{{name}}</li>
</template>

最佳答案

如果您想从模板 View 进行更改,我建议您安装 iron:router包。

运行

meteor add iron:router

莱斯特创造了 routes.js/lib 上文件夹

现在让我们一步一步来。

首先在 myAppName/client/views/layout.html 上创建 1 个模板

<template name="layout">
{{> yield}}
</template>

并使用此代码更新 routes.js。

Router.configure({
layoutTemplate: 'layout' // here we say that layout template will be our main layout
});

现在在同一个 routes.js 上创建这 2 条路线。

Router.route('/home', function () {
this.render('home');
});

Router.route('/viewList', function () {
this.render('viewList');
});

如果您导航到 localhost:3000/home,则使用它或 /viewList你会在那里看到 html 内容。

备注:<header>在模板中您不需要它。

现在这只是一个例子,因为我真的不知道你的主要想法是什么。

您正在调用 {{#each lists}}home里面模板,那么拥有 viewList 有什么意义呢?模板?

现在如果您想为每个列表创建单独的动态路由,您可以试试这个。

Router.map(function () {
this.route('listViews', {
path: '/listViews/:_id',
waitOn: function(){
return Meteor.subscribe('lists')
},
data: function(){
return Lists.findOne({_id: this.params._id});
}
});
});

现在有了这个,如果您转到 localhost:300/listView/35dwq358ew,您就拥有了 List 集合中每个对象的动态模板。例如,您将使用一些数据渲染 listView。

你可以在模板列表中做这样的事情

<template name="list">
<li class="list-row" id="{{_id}}">{{name}}</li>
<li><a href="/listViews/{{this._id}}">Check this List in detail</a></li>
</template>

viewList 模板将如下所示。

<template name="viewList">
<h2>{{title}}</h2>
<!-- list details will show here -->
{{informationAboutList}}
</template>

关于javascript - meteor ,如何更改事件模板( View )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28535863/

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