动态加载我的’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
,这是一个form
的template
。
欢迎大家帮助,
谢谢
格伦
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的模型