Backbone fetch()总是返回相同的模型

时间:2013-08-07 23:12:45

标签: jquery rest twitter-bootstrap backbone.js

出于某种原因,我的代码总是返回相同的模型,即使我在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不同 enter image description here

编辑:添加路由器映射

var AppRouter = Backbone.Router.extend({

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

2 个答案:

答案 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 },
    });