javascript-无法获取正确的网址问题
作者:互联网
我有一个带路由器外观的opboneJS应用程序
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()) );
}
});
}
我以为提取时urlRoot会调用/ stores / ID_HERE,但是现在它不调用它,而是调用/ stores /,但是我不确定为什么以及如何解决此问题?
在devTools中,这是它要使用的网址:
GET http://localhost/stores/
解决方法:
这可能不是答案,因为它取决于您的实际生产代码.
通常,您输入的代码应该可以运行,甚至我看到一条评论说它可以在jsfiddle中运行.有两个原因可能会影响结果:
>在代码中,您更改了Backbone.Model.url()函数.默认情况下,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);
},
这是Backbone用于生成model.fetch();的URL的函数.
>当您声明商店模型与数据库中的模型一样时,您添加了一个自定义idAttribute.例如,您的数据库具有与id本身不同的id,但是在您的代码中,您仍然使用new Model({id:id});当您真正应该使用新的Model({customId:id});时.幕后发生的事情是您在url()函数中看到它检查模型是否为isNew().此函数实际上检查是否设置了id,但如果是自定义的,则检查以下内容:
isNew: function() {
return !this.has(this.idAttribute);
},
>您搞砸了Backbone.sync …可以做很多事情,除非我想在上面写论文,否则我什至不会开始.也许您遵循了一个教程,却不知道它可能会影响其他代码.
>您将model.fetch()称为“ la” $.ajax样式:
model.fetch({
data: objectHere,
url: yourUrlHere,
success: function () {},
error: function () {}
});
这将覆盖Backbone自动化的强大功能. (我认为同步是从这里接管的,请不要在此引用我的意思).
参考:Backbone annotated sourcecode
标签:backbone-js,underscore-js,javascript,jquery,model 来源: https://codeday.me/bug/20191029/1959415.html