3

出于某种原因,我的代码总是返回相同的模型,即使在我在 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 中的内容不同的地方 在此处输入图像描述

编辑:添加路由器映射

var AppRouter = Backbone.Router.extend({

routes: {
    ""                     : "home",
    <!-- venues -->
    "venues"               : "venueList",
    "venues/page/:page"    : "venueList",
    "venues/add"           : "addVenue",
    "venues/:id"           : "venueDetails",
4

2 回答 2

1

这个

 var base = 'http://localhost:3000';

是个坏主意,完全没有必要。完全摆脱它。只需使用绝对路径(如“/venues”)作为 URL,无论在何处运行,您的应用程序都能正常运行。

在您的代码和屏幕截图之间有 2 个不同的端口。您确定您正在与正确的应用程序服务器通话吗?

否则,您是否检查过服务器端代码是否存在错误?这可能很简单,因为服务器端代码在查询数据库时使用了错误的值。

于 2013-08-07T23:39:25.953 回答
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 },
    });
于 2013-08-08T05:58:11.577 回答