好的,我已经在这里找到了另一个问题的答案,但我正在努力做一些事情。我有一个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
分组,例如:
<code> { id; XX, data: XX, another:XX, last:YY } </code>
这些数据是从数据库接收的,现在我该如何动态地执行此操作?我的意思是,在我的收藏集的URL
'行中,它将2
作为current ID
传递。如何backbone
调用我需要的每个ID
,数据库中当前有6
个列表。所以我需要display/console log
(目前用于测试)所有6
输入,那么如何将ID
输入更改为1-6
?我应该只使用for loo
吗?如果从数据库中删除列表或者添加更多列表,我真的想要一些不需要改变的东西吗?
这个JSON data
的最终目标是加载到我的Backbone view
,template
是form
。
欢迎大家帮忙,
由于
格伦
P.S对不起,如果我的拼写关闭,我是阅读障碍,也可能没有解释正确的事情,所以让我知道,我会改进我的措辞,谢谢。
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&lt; - X是id号时,它将只返回那些行ID数据。
格伦
答案 0 :(得分:1)
您不应该在集合级别为集合中的每个模型提出单独的请求。您为集合设置的URL应默认请求所有模型。所以不是:
'/GetData/2'
应该是:
'/GetData'
然后,在服务器端,您应确保GetData
操作返回所有MyModels
。
然后,您可以为GetData
编写带有参数的覆盖,以返回单个模型或过滤结果。您将对单个模型检索特别感兴趣,它应该是模型级别使用的URL。事实上,你已经有了这个动作,因为你正在使用它(错误地)来检索集合。这是与/GetData/2
网址相关联的操作。此操作应该是在模型中调用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
}
});
答案 1 :(得分:0)
所以......你似乎正在做的事情会让真的很难(甚至可能)与Backbone合作。
你应该拥有的是API端点(例如)&#34; getData&#34;这将返回所有模型:
[
{id: 1, name: "asdflj"},
{id: 2, name: "lsdfkjg"},
// etc.
]
然后,你定义&#34; getData&#34;作为集合的网址。对于集合中的每个模型,Backbone将自动计算模型实例的URL作为(例如)&#34; getData / 2&#34; (如果模型&#39; s id
是2)。
换句话说,您需要更改API才能拥有: