编程语言
首页 > 编程语言> > javascript-无法获取正确的网址问题

javascript-无法获取正确的网址问题

作者:互联网

我有一个带路由器外观的opboneJS应用程序

var StoreRouter = Backbone.Router.extend({
   routes: {
     'stores/add/' : 'add',
     'stores/edit/:id': 'edit'
   },
   add: function(){
     var addStoresView = new AddStoresView({
       el: ".wrapper"
     });
   },
   edit: function(id){
       var editStoresView = new EditStoresView({
          el: ".wrapper",
          model: new Store({ id: id })
       });
   }
});
var storeRouter = new StoreRouter();
Backbone.history.start({ pushState: true, hashChange: false });

和一个看起来像的模型:

var Store = Backbone.Model.extend({
   urlRoot: "/stores/"
});

然后我的视图如下所示:

var EditStoresView = Backbone.View.extend({
  ...
render: function() {

   this.model.fetch({
      success : function(model, response, options) {
          this.$el.append ( JST['tmpl/' + "edit"] (model.toJSON()) );
      }
   });
}

我以为提取时urlRoot会调用/ stores / ID_HERE,但是现在它不调用它,而是调用/ stores /,但是我不确定为什么以及如何解决此问题?

在devTools中,这是它要使用的网址:

GET http://localhost/stores/

解决方法:

这可能不是答案,因为它取决于您的实际生产代码.

通常,您输入的代码应该可以运行,甚至我看到一条评论说它可以在jsfiddle中运行.有两个原因可能会影响结果:

>在代码中,您更改了Backbone.Model.url()函数.默认情况下,url函数是

url: function() {
      var base =
        _.result(this, 'urlRoot') ||
        _.result(this.collection, 'url') ||
        urlError();
      if (this.isNew()) return base;
      return base.replace(/([^\/])$/, '$1/') + encodeURIComponent(this.id);
    },

这是Backbone用于生成model.fetch();的URL的函数.
>当您声明商店模型与数据库中的模型一样时,您添加了一个自定义idAttribute.例如,您的数据库具有与id本身不同的id,但是在您的代码中,您仍然使用new Model({id:id});当您真正应该使用新的Model({customId:id});时.幕后发生的事情是您在url()函数中看到它检查模型是否为isNew().此函数实际上检查是否设置了id,但如果是自定义的,则检查以下内容:

isNew: function() {
      return !this.has(this.idAttribute);
    },

>您搞砸了Backbone.sync …可以做很多事情,除非我想在上面写论文,否则我什至不会开始.也许您遵循了一个教程,却不知道它可能会影响其他代码.
>您将model.fetch()称为“ la” $.ajax样式:

model.fetch({
  data: objectHere,
  url: yourUrlHere,
  success: function () {},
  error: function () {}
});

这将覆盖Backbone自动化的强大功能. (我认为同步是从这里接管的,请不要在此引用我的意思).

参考:Backbone annotated sourcecode

标签:backbone-js,underscore-js,javascript,jquery,model
来源: https://codeday.me/bug/20191029/1959415.html