从URL问题中获取模型

Get Model From URL Issue

本文关键字:获取 模型 问题 URL      更新时间:2023-09-26

我有一个骨干js应用,它有一个路由器,看起来像:

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

我的模型看起来像:

var Store = Backbone.Model.extend({
   urlRoot: function(){
      if (this.isNew()){
          return "/stores";
      } else {
          return "/stores/" + this.id;
      }
   }
});

在Chrome的JS控制台,它显示有一个GET请求只是/stores url,当它应该发出请求/stores/ID_HERE

Backbone使用模型的id字段来确定它是否是新的,并且在构造它时将其传递进来。

你可以跳过一些圈做延迟加载的模型编辑-也就是说,只有fetch时,试图编辑-但它可能更容易改变你的urlRoot属性为一个简单的"/stores/"。Backbone将使用该urlRoot属性以及模型的ID来构造URL。这是有道理的;如果你有一个id为3的Store模型,你会想要点击"/stores/3"来加载它,而不管它的"新"状态。

如果你怀疑你的应用程序有可能构造一个没有ID的Store,你可能想重写你的Storeurl函数,如果它在一个没有ID的模型上被调用,就抛出一个异常。

是的,这是有意义的,model . isnew()用于检查模型是否具有id属性(在这里查看更多信息,http://backbonejs.org/#Model-isNew)。这样主干就知道什么时候执行保存或放置到服务器。

要使用ID从服务器获取数据,您需要这样做:

var store = new Store({id: id}); // Ok here we're setting an id on our model.
var Store = Backbone.Model.extend({
    urlRoot: function(){
       return "/stores/"
    }
    GetData : function (){
        this.fetch()
    }  
});

如果你的模型有任何属性,当你执行取回,所有的属性将被发送到服务器。

所以你的url必须是相同的,但如果你的模型有一个Id属性,url将是类似'stores/1'的东西。如果没有,将只有'stores/'

在你的API中,你需要有两个方法,一个需要一个(int)形参,另一个不需要任何参数。

希望能有所帮助。