流星在使用流路由器时抛出错误"Exception in defer callback: Error: Can't call non-function: [object Object]"



我是流星的新手,并遵循视频教程。问题是这个视频教程并没有完全使用ES6。所以没有进出口。但是我正在使用es6的功能制作我的流星应用程序,特别是导入和导出模块。

我的项目文件是:

/lib/router.js:

FlowRouter.route("/", {
    name: 'home',
    action(){
        BlazeLayout.render("HomeLayout");
    }
});
FlowRouter.route("/test", {
    name: 'test',
    action(){
        BlazeLayout.render("MainLayout",{ main: "TestPage" });
    }
});

/进口/ui/布局/HomeLayout.html:

<template name="HomeLayout">
    <header>
        <h1>My Recipe Book</h1>
        {{> loginButtons}}
    </header>
    <main>
        <div class="billboard">
            <h4>Organise your meals</h4>
        </div>
    </main>
</template>

/进口/ui/布局/MainLayout.html:

<template name="MainLayout">
    <header>
        <h1>My Recipe Book</h1>
        {{> loginButtons}}
    </header>
    <main>
        {{ Template.dynamic template=main }}
    </main>
</template>

/进口/ui/页面/TestPage.html:

<template name="TestPage">
    I am a test....
</template>

/客户/main.js:

import { Template } from 'meteor/templating';
import '/lib/router.js';
import '/imports/ui/layouts/MainLayout.html';
import '/imports/ui/layouts/HomeLayout.html';
import '/imports/ui/pages/TestPage.html';

我正在使用的包:

1 - BlazeLayout

2 - Flow-Router

3 - accounts-ui

4 - accounts-password

现在我的问题是,当我打开localhost:3000我看到我的HomeLayout预期。但是,当我去到localhost:3000/test,我得到以下错误:

Exception in defer callback: Error: Can't call non-function: [object Object]
    at Spacebars.call (http://localhost:3000/packages/spacebars.js?hash=65db8b6a8e3fca189b416de702967b1cb83d57d5:175:13)
    at Spacebars.mustacheImpl (http://localhost:3000/packages/spacebars.js?hash=65db8b6a8e3fca189b416de702967b1cb83d57d5:106:25)
    at Object.Spacebars.mustache (http://localhost:3000/packages/spacebars.js?hash=65db8b6a8e3fca189b416de702967b1cb83d57d5:110:39)
    at ._render (http://localhost:3000/app/app.js?hash=9b7bb2e95b10af20d691075d259b8ad46bc15c1d:55:22)
    at doRender (http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:2027:25)
    at http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:1875:20
    at Function.Template._withTemplateInstanceFunc (http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:3687:12)
    at http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:1873:29
    at Object.Blaze._withCurrentView (http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:2214:12)
    at viewAutorun (http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:1872:18)

这在视频教程中工作得很好,视频教程是来自水平的tuts,它也很有名。但正如我所说的,它是旧版本的流星,所以没有es6。我使用的meteor版本是1.3.4.1。

请帮助我解决这个问题,因为我卡在这里无法取得进展。

哦,找到问题了。在{{Template的句柄语法中缺少一个闭角括号。动态模板=主要}}。应该是{{> Template。动态模板=主要}}

您不需要在main.js文件中导入和导出。Meteor为您完成了所有这些工作。你可以直接删除main.js

相反,只需将模板html文件放在client目录中。Meteor将自动检测它们,并且您的路由器将能够访问它们。

相关内容

最新更新