Backbone.js路由器在put时触发,而不是post时触发

Backbone.js路由器在put时触发,而不是post时触发,backbone.js,backbone-routing,Backbone.js,Backbone Routing,因此,我一直在使用basic Backbone.js创建一个简单的演示页面,它是一个基本的用户管理器。无论是创建(发布)还是更新(放置)用户信息,我都会运行相同的函数。POST和PUT请求均成功(即调用我的“success”函数),但只有PUT命令会触发路由器,POST请求不会触发同一行代码,而它会触发success函数 下面是我的事件代码。saveUser函数负责PUT和POST请求,但成功的路由器仅从成功的PUT请求触发,而不是从成功的POST请求触发(即使两者都成功更新了数据库) 任何帮助

因此,我一直在使用basic Backbone.js创建一个简单的演示页面,它是一个基本的用户管理器。无论是创建(发布)还是更新(放置)用户信息,我都会运行相同的函数。POST和PUT请求均成功(即调用我的“success”函数),但只有PUT命令会触发路由器,POST请求不会触发同一行代码,而它会触发success函数

下面是我的事件代码。saveUser函数负责PUT和POST请求,但成功的路由器仅从成功的PUT请求触发,而不是从成功的POST请求触发(即使两者都成功更新了数据库)

任何帮助都将不胜感激


谢谢

问题是,当您创建新用户时,您已经处于url
,并且
路由器。仅当
newUrl
与当前页面url不同时,才会触发导航(newUrl)

改变

router.navigate('', {trigger: true});


问题是,当您创建新用户时,您已经在url
,并且
路由器上。仅当
newUrl
与当前页面url不同时,才会触发导航(newUrl)

改变

router.navigate('', {trigger: true});


发布时,当前url为“http://gocella.com/backbone/#,发布后,您将导航到http://gocella.com/backbone/#“这不会更改url,也不会触发事件

路由器仅在url更改时触发事件,它从更新开始工作,因为当您点击“编辑url更改为”时http://gocella.com/backbone/#/edit/1,然后触发器变回http://gocella.com/backbone/#"

我认为使用路由器解决这个问题的方法完全是不正确的

你应该做更多的事情,包括:
单击“保存”时,创建新模型或使用表单值更新现有模型,然后使用
集合。创建(modelFromForm)
,或者,如果使用
模型。保存
,则在成功回调上,将其添加到集合中。发布时,当前url为“http://gocella.com/backbone/#,发布后,您将导航到"http://gocella.com/backbone/#“这不会更改url,也不会触发事件

路由器仅在url更改时触发事件,它从更新开始工作,因为当您点击“编辑url更改为”时http://gocella.com/backbone/#/edit/1,然后触发器变回http://gocella.com/backbone/#"

我认为使用路由器解决这个问题的方法完全是不正确的

你应该做更多的事情,包括:

点击“保存”按钮时,创建一个新模型或使用表单值更新现有模型,然后使用
collection.create(modelFromForm)
,或者,如果使用
model.save
,则在成功回调上,将其添加到集合中

您是否尝试过执行console.log(回复)操作在saveUser函数上,查看执行POST时返回什么?“POST请求不会触发同一行代码,而它会触发成功函数。”我很困惑。因此,如果在
success
回调中添加
console.log(“Hi!”);
,您会得到“Hi!”!“在POST和PUT上?我尝试了控制台日志记录,Lukas是正确的。它成功地在控制台中登录,但实际上没有触发路由器。:/当您编辑和创建用户时,页面的URL是否不同?基本上,它触发的视图应该刷新userList视图和editUser视图,重置页面和upd查看信息。这是一个指向项目的链接,请随意处理。您是否尝试过在saveUser函数上执行console.log(reply)并查看它在执行POST时会返回什么?“POST请求不会触发同一行代码,而会触发success函数。”我很困惑。因此,如果添加
console.log(“Hi!”)
成功
回调中,您会得到“嗨!“在POST和PUT上?我尝试了控制台日志记录,Lukas是正确的。它成功地在控制台中登录,但实际上没有触发路由器。:/当您编辑和创建用户时,页面的URL是否不同?基本上,它触发的视图应该刷新userList视图和editUser视图,重置页面和upd查看信息。这是指向项目的链接,请随意处理。@MelArlo,我修复了答案,因此现在应该可以使用了。您可以重试吗?@MelArlo,现在您遇到了相反的问题。请尝试连续创建两个新用户。您会遇到相同的问题,因为现在您正在路由到
#new
。您不应该使用路由器进行此操作问题是,这是真的吗problem@Lukas,我明白你的意思。我确实尝试了你上面的建议,但没有得到正确的结果。也许我只需要看一下基本的刷新或重定向?@Lukas,这很有效!非常感谢!你能告诉我Backbone.history.fragment=null;line的作用是什么以供将来参考吗?@MelArlo,我这样修正了答案现在应该可以了。你能再试一次吗?@MelArlo,现在你遇到了相反的问题。试着连续创建两个新用户。你会遇到同样的问题,因为现在你正在路由到
#new
。你不应该使用路由器解决这个问题,这是真正的问题吗problem@Lukas,我明白你的意思。我确实试过你上面的建议,但没有得到批准正确的结果。也许我只需要看一下基本的刷新或重定向?@Lukas,这很有效!非常感谢!你能告诉我Backbone.history.fragment=null;line用于将来的参考吗?我明白你的意思了,Patrick,我将试一试。谢谢!与其在成功时添加结果,为什么不直接使用
collection.create
?是的,@Lukas,这是一个方便的函数,它以一种更简单的方式完成了我刚才所说的所有内容。我不知道。去吧。@Patrick&Lukas:我要去coll
router.navigate('', {trigger: true});
Backbone.history.fragment = null; // Forces the current URL to be dirty
router.navigate('', {trigger: true}); // Now, Backbone thinks the new URL is different