动态加载我的’ID’到我的Backbone Collection?

好的,我已经在这里找到了另一个问题的答案,但我正在尝试做一些更多的事情。 我有一个Backbone设置如下,

var MyModel= Backbone.Model.extend(); var MyCol = Backbone.Collection.extend({ model : MyModel, url: '/GetData/2', parse: function(response) { return response; } }); var stuff = new MyCol; stuff.fetch({ success: function (collection, response) { console.log(response); } }) 

现在这段代码完全有效。 现在解释一下, URL是用PHP Slim设置的,它返回JSON encoded data ,其中将是四个key/pair分组,例如:

  { id; XX, data: XX, another:XX, last:YY }  

这些数据是从数据库接收的,现在我应该如何动态地执行此操作? 我的意思是,在我的集合中的URL ‘行,它传递2作为current ID 。 我如何获得backbone来调用我需要的每个ID ,目前数据库中有6列表。 所以我需要display/console log (目前用于测试)所有6输入,那么如何将该ID输入更改为1-6 ? 我应该只用一个for loo吗? 如果从数据库中删除列表或者添加更多列表,我真的想要一些不需要改变的东西吗?

最终目的是为了将这个JSON data加载到我的Backbone view ,这是一个formtemplate

欢迎大家帮助,

谢谢

格伦

PS对不起,如果我的拼写关闭,我是阅读障碍,也可能没有解释正确的事情,所以让我知道,我会改善我的措辞,谢谢。

EDITS

这就是我现在正在使用的::

  var AdminModel = Backbone.Model.extend({ defaults: {}, urlRoot: '/GetData' }); var AdminColModel = Backbone.Collection.extend({ model : AdminModel, url: '/', parse: function(response) { //console.log(response); return response; } }); var stuff = new AdminColModel; stuff.fetch({ success: function (collection, response) { console.log(collection); } }) 

这根本不是控制台记录的东西吗? 但PHP设置正常,因此当你转到/getData ,如果数据库中的所有行都得到一个完整的列表。 当你查看/ getData / X < – X是id号时,它将只返回那些行ID数据。

格伦

您不应该在集合级别为集合中的每个模型单独请求。 您为集合设置的URL应默认请求所有模型。 所以不是:

  '/GetData/2' 

它应该是:

  '/GetData' 

然后在服务器端,您应该确保GetData操作返回所有MyModels

然后,您可以为GetData编写带有参数的覆盖,以返回单个模型或过滤结果。 您将对单个模型检索特别感兴趣,它应该是模型级别使用的URL。 事实上,您已经有了这个动作,因为您正在使用它(错误地)来检索该集合。 这是与/GetData/2 URL关联的操作。 此操作应该是在模型内调用fetch时使用的操作, 而不是集合。

希望这会有所帮助。

发布编辑

添加一些代码来协助。

 var AdminModel = Backbone.Model.extend({ urlRoot: '/GetData' }); var AdminCollection = Backbone.Collection.extend({ model : AdminModel, url: '/GetData' }); var wholeCollection= new AdminCollection(); // the fetch method on the collection uses the AdminCollection.url property wholeCollection.fetch({ success: function (collection) { console.log(collection); // will output collection object to console } }); // this model does not exist in any collection var modelOutsideCollection = new AdminModel({}, { id: "2" }); // because the model is not in a collection, fetch uses the AdminModel.urlRoot proeprty modelOutsideCollection.fetch({ success: function (model) { console.log(model); // outputs a single model with id of 2 to collection } }); 

所以……你似乎正在做的事情会让使用Backbone变得非常困难(如果可能的话)。

你应该拥有的是一个API端点(例如)“getData”,它将返回所有模型:

 [ {id: 1, name: "asdflj"}, {id: 2, name: "lsdfkjg"}, // etc. ] 

然后,将“getData”定义为集合的url。 对于集合中的每个模型,Backbone将自动计算模型实例的url(例如)“getData / 2”(如果模型的id为2)。

换句话说,您需要更改您的API才能:

  • getData – >返回所有模型
  • getData / 2 – >返回ID为2的模型