gpt4 book ai didi

javascript - 添加 account-ui 包后,Meteor 模板被创建两次

转载 作者:行者123 更新时间:2023-12-03 07:42:57 26 4
gpt4 key购买 nike

我开始学习 meteor 并设置了一个小型测试项目。我制作了一个简单的模板,例如 test.html:

<head>

<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">

<title>Test</title>

</head>
<body>

{{> TestPage}}

</body>
<template name="TestPage">
<p>hello</p>
</template>

我还安装了iron-router,并尝试设置了路由。然后我检查了 meteor run,一切正常,我得到了一个带有 hello 文本符号的普通页面。之后,我想尝试制作简单的登录页面,我添加了meteor添加accounts-ui account-password。之后,当我尝试加载页面时,hello 显示了两次。所以我转到 js 部分来尝试了解发生了什么。这是完整的 test.js:

var textMessage = "";
var textMessageDep = new Deps.Dependency;

var getTextMessage = function()
{
textMessageDep.depend();
return textMessage;
};
var setTextMessage = function (newValue) {
if (newValue !== textMessage)
textMessageDep.changed();
textMessage = newValue;
};
Template.TestPage.onRendered(function () {
console.log('on rendered');
});
Template.TestPage.onCreated(function () {
console.log('on created');
});

因此,我设法在 js 控制台中获得以下输出:

on created
on created
on rendered
由于某种原因,

On created 事件被调用两次,这就是为什么我得到了渲染的模板的两个副本。如何正确克服这个问题呢?我假设 meteor 等待 Meteor.Users 集合准备好?我什至没有向此集合添加任何用户。

这也是我的路由器配置的样子:

Router.map(function() {
this.route('/', {
onBeforeAction: function () {
// here planned to add
// if(!Meteor.user()) {}
//
this.render('TestPage');
}

});
});

最佳答案

这是因为你要求 Meteor 渲染模板两次。默认情况下,meteor 将首先加载带有 body 标记的任何文件,即您此时放置 TestPage 模板的文件。然后,您将 TestPage 的另一个渲染放入 onBeforeAction 中,因此,页面上会出现另一个 TestPage。解决此问题的一种方法是删除 onBeforeAction

中的那个

指定要在路由器中渲染的模板的正确方法是

this.route('TestPage', {
path: '/'
});

并删除body中的那个

关于javascript - 添加 account-ui 包后,Meteor 模板被创建两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35328964/

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