【问题标题】:Meteor > Accounts.createUser rerender pages on every browsersMeteor > Accounts.createUser 在每个浏览器上重新渲染页面
【发布时间】:2013-12-18 04:23:46
【问题描述】:

我对 Accounts.createUser() 有一些不明白的地方。当新用户注册我的应用程序时(或者当他键入已使用的电子邮件并收到警告警报时),它会导致仪表板页面为每个浏览器重新呈现(也可能是其他页面上的所有浏览器。事情是,我们确实可以看到仪表板被重新渲染,因为我看到 facebook 按钮重新出现,这要归功于下面的代码。

Template.dashboard.rendered = function() {
    FB.XFBML.parse(document.getElementById('facebookButton')); // render facebook like button
};

我花了很多时间弄清楚模板重新呈现的原因。我希望有人有一个想法。当我们使用 Accounts.createUser() 时,它是 Meteor 的核心功能吗?

// on the client
Accounts.createUser({email: email, password: password}, function(err) {
    if (err) {
        if (err.message === 'Email already exists. [403]') {
            Session.set('alert', {type: 'error', message: 'We\'re sorry but this email is already used.'});
        } else {
            Session.set('alert', {type: 'error', message: 'We\'re sorry but something went wrong.'});
        }
        rumble(signUpForm);
    } else {
        Session.set('alert', {type: 'success', message: 'Congrats! You\'re now a Famecoiner!'});
        unblockForm(signUpForm);
        Router.go('welcome');
    }
});

【问题讨论】:

    标签: facebook meteor


    【解决方案1】:

    该问题可能与您的模板 HTML 有关。当模板的一部分需要重新渲染时,Meteor 会重新渲染整个模板。尝试将您的登录 HTML 放在 {{#isolate}}...{{/isolate}} 块中或使其成为子模板。

    【讨论】:

    • 我猜您的仪表板模板在某种程度上取决于“警报”会话变量。因此,当“警报”更改时,仪表板模板会按预期重新呈现。将隔离区放在使用“警报”的部分周围,整个仪表板不应再重新渲染。
    猜你喜欢
    • 2020-08-12
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 2012-10-10
    • 2014-10-17
    • 2011-12-17
    • 2015-02-03
    • 2015-07-21
    相关资源
    最近更新 更多