Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法获取正确的url问题_Javascript_Jquery_Backbone.js_Model_Underscore.js - Fatal编程技术网

Javascript 无法获取正确的url问题

Javascript 无法获取正确的url问题,javascript,jquery,backbone.js,model,underscore.js,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" }); },

我有一个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/"
});
var EditStoresView = Backbone.View.extend({
  ...
render: function() {

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

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\u,但现在它不调用它,它只调用/stores/,但我不确定为什么以及如何解决这个问题

在devTools中,下面是它的url:

GET http://localhost/stores/

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

通常情况下,您输入的代码应该可以工作,我甚至看到一条评论说它可以在JSFIDLE中工作。有几个原因可能会影响结果:

  • 在代码中,您更改了
    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);
        },
    
    这是主干网用来为
    model.fetch()生成URL的函数

  • 当您声明商店模型与数据库中的模型相似时,添加了一个自定义
    idAttribute
    。例如,数据库的id与
    id
    本身不同,但在代码中仍然使用
    新模型({id:id})
    当您确实应该使用
    新模型({customId:id})时。幕后发生的事情是,您可以在
    url()
    函数中看到,它检查模型
    是否为new()
    。此函数实际上检查是否设置了
    id
    ,但如果是自定义的,则检查:

    isNew: function() {
          return !this.has(this.idAttribute);
        },
    
  • 你把主干网搞砸了。同步。。。很多事情都可以用这个来完成,除非我想写一篇论文,否则我甚至不会开始。也许您在不知道教程可能会影响其他代码的情况下遵循了教程

  • 您调用了
    model.fetch()

    model.fetch({
      data: objectHere,
      url: yourUrlHere,
      success: function () {},
      error: function () {}
    });
    
    这超越了主干自动化的惊人之处。(我认为同步从这里接管,不要引用我的话)


参考:

您需要发布更多的源代码,设置
urlRoot
可能不是问题。@Whymarrh,当然,哪些部分会有帮助?查看代码的其余部分?@The::问题不在您提供的代码中-我尝试完成它,并且正确生成了URL。请随意将
console.log(id)
添加到
StoreRouter.edit()
,可能是
id
参数设置不正确。或者,您的应用程序中可能有其他代码路径,而不是您在此处复制的路径。@WladimirPalant,好的,我在console.log(id)中做了;在StoreRouter.edit()中,但它刚刚正确返回了id?@WladimirPalant,我刚刚编辑并添加了我唯一的其他路由函数。