我在使用铁路由器正确存储和访问路由时遇到问题。似乎Iron.Router在路由名称之前添加了一个额外的斜杠(/),而不是忽略模板名称的大小写,而不是创建默认路由。
我正在将Iron.Router添加到一个简单的测试应用程序中,我已将其拆分为单独的页面,但我无法使用map()或route()函数记录任何页面。我花了几个小时尝试选项和搜索,我似乎是唯一一个遇到过这个问题的人。所以我设置了一个最小的项目进行测试。我创建了一个新的meteor项目,删除了文件,然后从https://github.com/EventedMind/iron-router/tree/devel/examples复制了basic.js和basic.html。所有这个例子都是在你点击它们之间显示三个页面。然后我......
vagrant@precise32:/vagrant/test$ meteor add iron:router
vagrant@precise32:/vagrant/test$ meteor update
This project is already at Meteor 0.9.3.1, the latest release.
Your packages are at their latest compatible versions.
vagrant@precise32:/vagrant/test$ npm version
{ http_parser: '1.0',
node: '0.10.32',
v8: '3.14.5.9',
ares: '1.9.0-DEV',
uv: '0.10.28',
zlib: '1.2.3',
modules: '11',
openssl: '1.0.1i',
npm: '2.1.2' }
vagrant@precise32:/vagrant/test$ ls
basic.html basic.js.
vagrant@precise32:/vagrant/test$ meteor
它成功启动,但在Chrome(或FF)中抛出了JS错误。来自Tracker重新计算功能的异常:错误:找不到名为“/”或“”的模板。你确定你定义了吗?是的,我做到了。给路由一个空白名称不会产生错误,也不会产生主页。接下来我尝试在URL上添加“/ one”。然后我得到JS错误错误:哦不!找不到路径的路线:“/ one”。接下来,我将route()调用中的参数从“/ one”更改为“one”并出现此错误:错误:找不到名为“one”或“one”的模板。你确定你定义了吗?然后我尝试为路由“one”添加显式代码:“function(){this.render(”Home“)}以使用相同的大小写引用模板”Home“。我得到了与没有显式代码完全相同的错误消息。我可以让第一页显示的唯一方法是在HTML中将名称从“One”更改为“one”。我根本无法显示默认页面。
当在某些内部变量中使用Chrome控制台时,我找到了Router.routes,它有这种高度可疑的内容:
>
Router.routes.forEach(function(v){console.info(“name ='%s',originalPath ='%s',re ='%s'”,v.name, v.originalPath,v.re)})2014-10-04 16:10:07.756 name ='/',originalPath ='//',re ='/ ^ //?$ / i'
2014-10-04 16:10:07.757 name ='/ one',originalPath ='// one',re ='/ ^ // one /?$ / i'
2014-10-04 16:10:07.758 name ='/ two',originalPath ='// two',re ='/ ^ // two /?$ / i'
(如果我将路径命名为“one”,则路径将显示“one”作为名称,并将“/ one”显示为原始路径。
详细信息:这是一个全新的文件夹,其中只包含这两个文件(以及隐藏的.meteor文件夹)。添加的唯一包是“铁:路由器”。我在上一轮测试(一小时前)之前做了一次流星更新。我没有设置环境变量。我有最新版本的Chrome& Firefox浏览器。我正在使用来自Window 8的Vagrant的VirtualBox和12G内存。到目前为止我所做的每一个Meteor项目都有效,(除了一些尝试使用jQuery的人)。
如果这是Iron:路由器中的一个错误,其他人会注意到,但是我找不到任何可以在Iron-Router中添加或减去额外“/”的设置。任何人都有任何想法,我需要寻找什么,让我的机器上的香草Meteor项目使香草铁路由器工作?
答案 0 :(得分:1)
你真的不走运,因为你的问题非常简单:你正在运行的示例旨在与最新iron:router@1.0.0-pre3
一起使用,但你的铁:路由器版本很可能是0.9.4
。< / p>
试试这个:
meteor remove iron:router
meteor add iron:router@1.0.0-pre3
如果你想要更多的洞察力,过去的路由首先是名字而路径是一个选项,现在恰恰相反。
0.9.4
Router.map(function(){
this.route("home",{
path:"/"
});
});
1.0.0-pre3
Router.route("/",{
name:"home"
});