当使用flowrouter时,流星抛出错误“延迟回调中的异常:错误:无法调用非函数:[object Object]”

问题描述:

我是流星的新手,并且遵循视频教程。问题是这个视频教程没有完全使用ES6。所以没有进口和出口。但我正在使用es6功能制作我的流星应用程序,特别是模块的导入和导出。当使用flowrouter时,流星抛出错误“延迟回调中的异常:错误:无法调用非函数:[object Object]”

所以我的项目文件:

/lib/router.js:

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

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

/imports/ui/layouts/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 /layouts/MainLayout.html:

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

/imports/ui/pages/TestPage.html:

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

/client/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-流量路由器

3- accounts-ui

4-帐户密码

现在我的问题是,当我打开本地主机:3000我看到我的HomeLayout按预期。但是,当我去到本地主机:3000 /测试,我收到以下错误:

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。我使用的流星版本是1.3.4.1。

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

+0

您是否添加了'ecmascript'流星包? – pahan

+0

@pahan - 当然是 –

您不需要导入和导出您的main.js文件。流星为你工作。您可以删除main.js

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

+0

这样我就不会正确安排我的项目。我将它们放入我的导入文件夹的主要原因是我可以清楚地分隔不同文件夹中的不同页面。另外,稍后我可能不会使用特定的模板,或者我可能不想为特定的用户权限导入某些模板。 –

+1

如果需要,您可以将模板放在'client'内的不同目录中,例如'客户端/视图/ layouts'和'客户端/视图/ pages', –

哦,发现问题了。在{{Template.dynamic template = main}}的句柄语法中错过了一个封闭的角括号。它应该是{{> Template.dynamic template = main}}

+0

居然也得到了同样的错误,这为我工作。 –