您究竟是如何更改页面的?如果您使用传统的锚标签作为锚工具,Meteor 将重新加载整个页面。
例如,如果您在模板之间导航并使用这种结构:
<a href="/pathToTemplate">Let's go to the new template!</a>
Meteor 将重新加载整个页面,因为您实际上是在使用锚标记来告诉浏览器更改路由。但是,如果你使用这种结构:
<a href="{{pathFor 'yourTemplateName'}}">To the new template ahoy!</a>
该链接将告诉 Iron Router 为您更改模板并仅刷新您在 {{> yield}} 区域中的代码。要将链接指向正确的页面,请确保将路由器中 name:... 字段中列出的任何内容放在 pathFor 帮助程序的 'yourTemplateName' 部分中。
简而言之,您获得全浏览器刷新的原因很可能是因为您使用浏览器在链接之间进行转换,而不是使用内置的 Meteor 和 Iron Router 助手来计算过渡。您可以使用此帮助程序做更多事情,如果您需要更多信息,我建议您查看Iron Router's Git page 上的路径和链接模板帮助程序部分。
如果您只需要刷新页面的某些部分而其余部分保持不变,那么我会参考 CodeChimp 的答案,因为它是合理的。如果您需要用于各种内容的各种布局模板,Layouts 部分应该可以帮助您更好地编写代码,甚至可能让您像只有动作英雄坚定地从爆炸的建筑物中走开一样,露出假笑。
您可能会发现的另一种情况是,如果您需要使用链接来执行操作,但您不希望浏览器劫持事件并重新呈现页面。在这种情况下,您可以像往常一样设置 HTML,然后通过它的 id、类或标签名称来定位接收点击事件的元素,并在与您的模板对应的 javascript 文件中使用以下代码结构。这对于提交表单很有用,它触发 Meteor 方法,该方法在服务器中执行某些操作,然后返回必要的数据(通常是重定向函数)等等。
因此,如果您在模板 crazyStuffIsAboutToHappen 上,并且您想在单击 ID 为 #triggerCrazyStuff 的链接时调用名为 doCrazyStuff 的 Meteor 方法,然后让 Meteor 将您的用户重定向到模板 @ 987654331@,您将使用以下结构。
Template.crazyStuffIsAboutToHappen.events(
'click #triggerCrazyStuff': (e) ->
e.preventDefault() # to stop the browser from hijacking the event
# -- error handling and pre-submit validation and yadda yadda --
Meteor.call('doCrazyStuff', --arguments--, (error, result) ->
if error
# handle the error + short-circuit the function.
return throwError(error.reason)
Router.go('theHouseThatCrazyBuilt, {--args--})
)
是的,Template.TEMPLATE_NAME.events 区域对于所有其他 JS 事件也非常方便,例如 MouseEnter 等等。
编码愉快!