javascript - 没有获取正确的 url 问题

标签 javascript jquery backbone.js model underscore.js

我有一个 backboneJS 应用程序,它有一个看起来像的路由器

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/"
});

然后我的 View 看起来像:

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 中,这是它要访问的 url:

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 }); 当你真的应该使用 新模型({ customId: id });。在幕后发生的事情是您在 url() 函数中看到它检查模型是否 isNew()。此函数实际上检查是否设置了 id,但如果它是自定义的,它会检查:

    isNew: function() {
          return !this.has(this.idAttribute);
        },
    
  • 你搞砸了 Backbone.sync ...很多事情都可以用它来完成我什至不会开始,除非我想写一篇关于它的论文。也许您在学习教程时并不知道它可能会影响其他一些代码。

  • 您调用了 model.fetch() “a la” $.ajax 样式:

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

    这会覆盖 Backbone 自动化的强大功能。 (我认为同步从这里接管,不要引用我的话)。

引用:Backbone annotated sourcecode

关于javascript - 没有获取正确的 url 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24663251/

相关文章:

architecture - 在主干中的多个 View 之间共享模型

javascript - 除非首先在 DevTools 控制台中进行评估,否则 Backbone model.save() 会失败

javascript - 为什么可以用new Image 而不能用new Div 或new Span?

jquery - 在网站和 iframe 中打开图表 - 让 twitter、fb 只读取 iframe 中的图表

javascript - POST 动态创建的必填输入字段

jquery - 如何为我的 CSS 网格使用网格加载动画脚本 (GridLoaderFx)

javascript - 使用 useState 时如何减少 React 中的重复?

javascript - 是否可以像所有针对普通 HTTP 请求的示例一样在 Service Worker 中拦截和缓存 WebSocket 消息?

javascript - D3 网格中的力模拟

javascript - 在单个 Backbone View 和 EJS 模板中使用多个模型的问题