Javascript 无法获取正确的url问题
我有一个backboneJS应用程序,它有一个路由器Javascript 无法获取正确的url问题,javascript,jquery,backbone.js,model,underscore.js,Javascript,Jquery,Backbone.js,Model,Underscore.js,我有一个backboneJS应用程序,它有一个路由器 var StoreRouter = Backbone.Router.extend({ routes: { 'stores/add/' : 'add', 'stores/edit/:id': 'edit' }, add: function(){ var addStoresView = new AddStoresView({ el: ".wrapper" }); },
var StoreRouter = Backbone.Router.extend({
routes: {
'stores/add/' : 'add',
'stores/edit/:id': 'edit'
},
add: function(){
var addStoresView = new AddStoresView({
el: ".wrapper"
});
},
edit: function(id){
var editStoresView = new EditStoresView({
el: ".wrapper",
model: new Store({ id: id })
});
}
});
var storeRouter = new StoreRouter();
Backbone.history.start({ pushState: true, hashChange: false });
还有一个模型看起来像:
var Store = Backbone.Model.extend({
urlRoot: "/stores/"
});
var EditStoresView = Backbone.View.extend({
...
render: function() {
this.model.fetch({
success : function(model, response, options) {
this.$el.append ( JST['tmpl/' + "edit"] (model.toJSON()) );
}
});
}
然后我的观点是:
var Store = Backbone.Model.extend({
urlRoot: "/stores/"
});
var EditStoresView = Backbone.View.extend({
...
render: function() {
this.model.fetch({
success : function(model, response, options) {
this.$el.append ( JST['tmpl/' + "edit"] (model.toJSON()) );
}
});
}
我原以为抓取时urlRoot会在这里调用/stores/ID\u,但现在它不调用它,它只调用/stores/,但我不确定为什么以及如何解决这个问题
在devTools中,下面是它的url:
GET http://localhost/stores/
这可能不是答案,因为它取决于实际的生产代码 通常情况下,您输入的代码应该可以工作,我甚至看到一条评论说它可以在JSFIDLE中工作。有几个原因可能会影响结果:
- 在代码中,您更改了
函数。默认情况下,url函数为Backbone.Model.url()
这是主干网用来为url: function() { var base = _.result(this, 'urlRoot') || _.result(this.collection, 'url') || urlError(); if (this.isNew()) return base; return base.replace(/([^\/])$/, '$1/') + encodeURIComponent(this.id); },
model.fetch()生成URL的函数代码>
- 当您声明商店模型与数据库中的模型相似时,添加了一个自定义
。例如,数据库的id与idAttribute
本身不同,但在代码中仍然使用id
当您确实应该使用新模型({id:id})
新模型({customId:id})时代码>。幕后发生的事情是,您可以在
函数中看到,它检查模型url()
。此函数实际上检查是否设置了是否为new()
,但如果是自定义的,则检查:id
isNew: function() { return !this.has(this.idAttribute); },
- 你把主干网搞砸了。同步。。。很多事情都可以用这个来完成,除非我想写一篇论文,否则我甚至不会开始。也许您在不知道教程可能会影响其他代码的情况下遵循了教程
- 您调用了
model.fetch()
这超越了主干自动化的惊人之处。(我认为同步从这里接管,不要引用我的话)model.fetch({ data: objectHere, url: yourUrlHere, success: function () {}, error: function () {} });
参考:您需要发布更多的源代码,设置
urlRoot
可能不是问题。@Whymarrh,当然,哪些部分会有帮助?查看代码的其余部分?@The::问题不在您提供的代码中-我尝试完成它,并且正确生成了URL。请随意将console.log(id)
添加到StoreRouter.edit()
,可能是id
参数设置不正确。或者,您的应用程序中可能有其他代码路径,而不是您在此处复制的路径。@WladimirPalant,好的,我在console.log(id)中做了;在StoreRouter.edit()中,但它刚刚正确返回了id?@WladimirPalant,我刚刚编辑并添加了我唯一的其他路由函数。