使用Backbone获取项目似乎忽略了传入的id

时间:2013-02-06 16:08:48

标签: backbone.js

我在我的网络服务中有这些路由,我可以直接通过浏览器点击其中任何一个,然后返回正确的值。

app.get('/repairs', repair.findAll);
app.get('/repairs/:id', repair.findById);

当我要求Backbone执行此操作时,我意外地打电话给

app.get('/repairs', repair.findAll);

当我希望它达到

app.get('/repairs/:id', repair.findById);

似乎在调用“/ repairs”而不是“/ repairs /:id”的代码片段是

var EditRepair = Backbone.View.extend({
        el : '.page',
        render : function(options) {
            var scope = this;
            var repair = new Repair({id: options.id});                    

            //This has the correct id
            console.log(options.id);

            //I would expect this to call /repairs/12344312
            //However it calls /repairs
            repair.fetch({
                success : function(repair){
                    var template = _.template($('#edit-repair-template').html(), {repair : repair});
                    scope.$el.html(template); 
                }
            });
        }
    }); 

    var Repair = Backbone.Model.extend({
        urlRoot : 'repairs'
    }); 

    var Router = Backbone.Router.extend({
        routes: {
            'edit/:id' : 'editRepair'
        }    
    });

    var editRepair = new EditRepair();    
    var router = new Router();

    router.on('route:editRepair', function(id) {
        console.log('Edit Id : ' + id);
        editRepair.render({id:id});
    });

options.id可以是console.logged,并显示该项的正确ID。到目前为止,我已经遇到了一些问题,mongodb中的_id和脊柱中的id之间存在差异,但是对于我的生活,我不明白为什么这会发出维修而不是修理/ id。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:2)

我的错,我有一个编码uri组件的ajax prefilter。

这搞乱了发出的请求。

    $.ajaxPrefilter( function( options, originalOptions, jqXHR ) {
      options.url = "http://localhost:3000/" + encodeURIComponent( options.url );
      console.log(options.url);
    });

已更改为

        $.ajaxPrefilter( function( options, originalOptions, jqXHR ) {
          options.url = "http://localhost:3000/" + options.url;
          console.log(options.url);
        });