gpt4 book ai didi

javascript - 使用主干路由器重新渲染 Meteor 页面

转载 作者:搜寻专家 更新时间:2023-10-31 22:47:57 25 4
gpt4 key购买 nike

我正在尝试使用 Meteor 创建一个博客应用程序。在这个博客中有一个主页,访问者可以在这里简单地阅读帖子,另一个部分是我可以编辑帖子的“管理”面板。我正在尝试使用 handlebars 模板助手,但我不确定哪里出错了。我也是一名业余开发人员,正在努力更好地学习 Meteor 框架。我的代码是这样的:

blog.html

<head>
<title>Jeff Lam Tian Hung</title>
</head>

<body>
<h1>Jeff Lam Tian Hung</h1>
<a href="/" class="main">Main Page</a>
<a href="/admin" class="admin">Admin</a>
{{> content}}
</body>

<template name="content">
{{#if currentPage "blog"}}
{{#each posts}}
<h2>{{Title}}</h2>
<p>{{Body}}</p>
{{/each}}
{{/if}}

{{#if currentPage "admin"}}
<h2>{{admin}}</h2>
{{/if}}
</template>

blog.js

// Declaration of Collections
Posts = new Meteor.Collection("Posts");

// Helper variable is for pages
// TODO: changing this var will change the
// page but now how to rerender the page?
var page = "blog";

// Declaration of Template Reactivity Variables
Template.content.currentPage = function (type) {
return page === type;
};
Template.content.posts = function () {
return Posts.find({}, {sort: {Date: 1}});
};
Template.content.admin = function () {
return "This will render admin section";
};

// Router for Pages
var Router = Backbone.Router.extend({
routes: {
"": "main",
"admin": "admin"
},
main: function () {
page = "blog";
},
admin: function () {
page = "admin";
}
});

var BlogRouter = new Router;

Meteor.startup(function () {
Backbone.history.start({pushState: true});
});

publish.js(仅服务器端代码)

Posts = new Meteor.Collection("Posts");

该页面将使用上述代码呈现博客文章,但是当我访问 localhost:3000/admin 时,页面变量被设置为编码的“admin”,但页面/模板不会重新呈现自身以显示“管理员”文本。

但是,如果我要设置 var page = 'admin' 并刷新应用程序,页面会重新呈现管理消息。我不确定我是否正确使用 handlebars 模板助手来执行这种“带路由的单页模板刷新”。感谢您的帮助!

最佳答案

您的变量“page”不是响应式的,只是一个普通的 JavaScript 变量。它无法将更改通知 Meteor。

当我开始使用 Meteor 时,出于类似的目的,我将页面“代码”放入 session 变量中,这将触发您的页面更新。例如:

// Declaration of Template Reactivity Variables
Template.content.currentPage = function (type) {
return Session.equals("page", type);
};

在你的路由器中:

...
Session.set("page", "admin");

(尽管您可能想将 Session.set 位放在它自己的函数中)

因为 Session 变量在 Meteor 框架中是 react 性的,并且会在更改时通知。

关于javascript - 使用主干路由器重新渲染 Meteor 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12982578/

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