2014-02-27 62 views
1

我有一个骨干模型,看起来像这样主干在模型URL中插入查询字符串。我如何阻止它?

...

var Address = Backbone.Model.extend({ 
     urlRoot: '/address/' 
    }); 

    return { address: Address } 

}); 

我有一个表格打印出一个地址的模板。该模板由在其“渲染”函数中传递地址标识的视图呈现。这个视图是通过像这个'address /:id'这样的路线来达到的。

视图看起来像这样:

var AddressView = Backbone.View.extend({ 
     el: $('#myclass'), 

     render: function(options) { 
     var that = this; 

     var addr = new A.address({id: options.aid}); 

     addr.fetch({ 
      reset: true, 
      success: function(address) { 
       var template = _.template(ATemplate, {address: address}); 
       that.$el.html(template); 
      } 
     }); 

     return this; 
     }, 

     events: { 
     'submit .edit-address-form': 'editAddress' 
     }, 

     editAddress: function(ev) { 

     //serializeObject creates JSON object from form data 
     var addressDetails = $(ev.currentTarget).serializeObject(); 

     addr.save(addressDetails, function(addr) { 
      R.router.navigate('', {trigger: true}); 
     }); 
     return false; 
     } 
    }); 
    return { 
     addressView: new AddressView() 
    }; 

});

有两个问题。第一个问题是'editAddress'函数永远不会被调用,即使类名是正确的,并且按钮类型='submit'。

第二个问题是,当我提交的地址形成,一个查询字符串的基本URL和/#/地址之间内插的URL是乱码,如在

HTTP:/// ldmanclient /地址= 2500 +莫菲特+库&地址2 =大学+ +的加利福尼亚%2C +伯克利&城市=伯克利&邮编= 94720 & mailcode = 6000 &援助= 1#/地址/ 1

有没有人见过这种类型的行为?我究竟做错了什么?

+0

你有没有想过这个? – Sean

回答

0

正如mu说的那样,表单是在Backbone获得它之前提交给标准方式的。尝试阻止提交操作:

editAddress: function(ev) { 
    ev.preventDefault(); 

    // same code as above 
    }