出于某种原因,我的代码总是返回相同的模型,即使我在listView页面中选择项目后可以看到正确的id被传入。
// main.js (relavent function)
venueDetails: function (id) {
// here, id is correct
var venue = new Venue({_id: id});
venue.fetch({success: function(){
// here, the id of venue is changed for some reason
console.log(venue.id);
$("#content").html(new VenueView({model: venue}).el);
}});
this.headerView.selectMenuItem();
},
模特,
// model.js (relavent model)
var base = 'http://localhost:3000';
window.Venue = Backbone.Model.extend({
urlRoot: base+"/venues",
idAttribute: "_id",
});
window.VenueCollection = Backbone.Collection.extend({
model: Venue,
url: base+"/venues?populate=true"
});
在图片中,您可以看到model.id与url中的whats不同
编辑:添加路由器映射
var AppRouter = Backbone.Router.extend({
routes: {
"" : "home",
<!-- venues -->
"venues" : "venueList",
"venues/page/:page" : "venueList",
"venues/add" : "addVenue",
"venues/:id" : "venueDetails",
答案 0 :(得分:1)
此
var base = 'http://localhost:3000';
是个坏主意,完全没必要。完全摆脱它。只需使用绝对路径(例如&#39; /场地&#39;)作为网址,您的应用无论在何处运行都能正常运行。
在您的代码和屏幕截图之间有2个不同的端口。您确定要与正确的应用程序服务器通信吗?
否则,您是否检查过服务器端代码是否存在错误?它可能是一样简单,因为服务器端代码在查询数据库时使用了错误的值。
答案 1 :(得分:1)
我不知道模型中是否正确访问了_id
属性,因为venue.fetch
似乎正在调用某种类型的默认值。
也许试试:
window.Venue = Backbone.Model.extend({
urlRoot: base+"/venues",
idAttribute: this.options._id,
});
(并从选项哈希中提取id)
如果这不起作用,请尝试动态声明idAttribute
:
window.Venue = Backbone.Model.extend({
urlRoot: base+"/venues",
idAttribute: function() { return this.options._id },
});