Meteor 如何将数据上下文标记为已更改?
我有一个页面,处理来自url的一些查询数据,如Meteor 如何将数据上下文标记为已更改?,meteor,iron-router,Meteor,Iron Router,我有一个页面,处理来自url的一些查询数据,如localhost/home?foo=bar。 然后它将JSON发送到某个服务器的某处。这很管用。 使用iron router,我可以像这样处理表单提交:router.go('home',{},{query:queryObjectVar}),这同样有效 因此,当您使用foo=“somethingelse”提交表单时,您将进入localhost/home?foo=somethingelse,页面大部分不会重新加载,因为meteor magic看起来非常
localhost/home?foo=bar
。
然后它将JSON发送到某个服务器的某处。这很管用。
使用iron router,我可以像这样处理表单提交:router.go('home',{},{query:queryObjectVar})
,这同样有效
因此,当您使用foo=“somethingelse”
提交表单时,您将进入localhost/home?foo=somethingelse
,页面大部分不会重新加载,因为meteor magic看起来非常快,JSON是使用foo=somethingelse发送的,一切都很好
但是,如果您在localhost/home?foo=var
中,然后使用Router.go(…)
转到相同的路径,包含查询,则url不会更改,页面也不会发送JSON内容。在大多数情况下,这很好,因为技术上没有任何变化,所以不需要做任何事情。但是,我希望它的行为就像url改变了一样
我该怎么做
目前,我已将模板连接到查询,如下所示:
Router.route('home', {
data: function() { return this.params.query }
})
我不确定这是否是你想要的,但你可以通过额外导航来改变路线。 通常,在提交表单后,您希望用户知道表单是以某种方式接收或处理的。 我建议创建一个只处理处理过程的额外路径,比如/home/process。让表单提交上的事件处理程序导航到流程路由。路由的操作基于this.params.query发送json文件。 发送json后(我使用console.log,但更好的方法是Meteor.call('here__will_sent_json',this.param.query),呈现一个模板,让用户知道数据已发送。现在的诀窍是:在模板中有一个链接或按钮,可以导航到/主页或您希望用户指向的任何内容 模板
<template name="main">
<div>Sample application</div>
{{> yield}}
</template>
<template name="mainPage">
<div>Main page</div>
<a href="{{ pathFor 'home'}}">Home</a>
</template>
<template name="home">
<div>Home page</div>
{{> form}}
</template>
<template name="form">
<form id="myForm" method="get">
<input type="text" name="foo">
<input type="submit" value="Save">
</form>
</template>
<template name="finishedSending">
<div>finishedSending!</div>
<a href="{{ pathFor route='home'}}">go to main page</a>
</template>
我不确定这是否是你想要的,但你可以通过额外导航来改变路线。 通常,在提交表单后,您希望用户知道表单是以某种方式接收或处理的。 我建议创建一个只处理处理过程的额外路由,类似于/home/process。让表单submit上的事件处理程序导航到流程路由。路由的操作根据this.params.query发送json文件。 发送json后(我使用console.log,但更好的方法是Meteor.call('here__will_sent_json',this.param.query),呈现一个模板,让用户知道数据已发送。现在的诀窍是:在模板中有一个链接或按钮,可以导航到/主页或您希望用户指向的任何内容 模板
<template name="main">
<div>Sample application</div>
{{> yield}}
</template>
<template name="mainPage">
<div>Main page</div>
<a href="{{ pathFor 'home'}}">Home</a>
</template>
<template name="home">
<div>Home page</div>
{{> form}}
</template>
<template name="form">
<form id="myForm" method="get">
<input type="text" name="foo">
<input type="submit" value="Save">
</form>
</template>
<template name="finishedSending">
<div>finishedSending!</div>
<a href="{{ pathFor route='home'}}">go to main page</a>
</template>
你试过在路由器之前添加
e.preventDefault()
吗?go?@jasenkoh是的。这是使用iron Router处理表单的一部分。你解决了这个问题吗?如果解决了,你能发布它吗?我没有。我正在处理一个问题来替换这个问题。你试过添加e.preventDefault()吗
在路由器之前。开始
?@jasenkoh是的。这是使用iron Router处理表单的一部分。你解决了这个问题吗?如果解决了,你能发布它吗?我没有。我正在研究一个问题来取代这个问题。嗯,额外的导航是我想要避免的。嗯,额外的导航是我想要避免的。