1

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

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。

任何帮助表示赞赏。

4

1 回答 1

2

我的错,我有一个 ajax 预过滤器来编码 uri 组件。

这弄乱了发出的请求。

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

Changed to

        $.ajaxPrefilter( function( options, originalOptions, jqXHR ) {
          options.url = "http://localhost:3000/" + options.url;
          console.log(options.url);
        });
于 2013-02-06T16:51:55.710 回答