我有一个团队视图和一个团队模型,当我实例化团队视图时,我需要请求一个团队列表,用于模拟一个团队选择框使用/团队,我想知道我是怎么做的这是因为我不确定这个实际要求应该去哪里?我可以从一个URL获取然后POST到模型中的另一个URL吗?以下是一些代码片段:
国家/地区JSON
/支
[
{
"name": "Arsenal",
"nickname": "Gunners"
},
{
"name": "Manchester United",
"nickname": "Red Devils",
}
]
团队模型
module.exports = Backbone.Model.extend({
url: '/team'
defaults: {
'name': '',
'badge': '',
'nickname': '',
'city': ''
},
initialize: function() {
},
validate: function() {
}
});
制作我的新观点
var teamView = new TeamView({
model: new TeamModel() // but where does my teams request go?
});
答案 0 :(得分:1)
在Backbone中,假设你有一个模型类型。
var MyModel = Backbone.Model.extend({ ... });
该类型的一个属性是url
,另一个属性是id
,它是服务器上的id
。
var MyModel = Backbone.Model.extend({
url: function() { return '/api/item/' + this.get('id'); }
})
如果您想GET
为其定义网址的模型,请致电fetch
:
var MyModel = Backbone.Model.extend({ ... });
var model = new MyModel();
在fetch
您的模型没有id
之前,它被视为“新”模型。在fetch
您的模型有id
后,它被视为“现有”模型。
如果要创建或更新模型的更改,请致电save
。如果是新的,它将POST model.url()
;如果更新,PUT model.url()
:
var MyModel = Backbone.Model.extend({ ... });
var model = new MyModel();
model.set('somethingToSave','theValueToSaveToServer');
model.save();
完成保存后,它将转到sync
事件处理程序。
var MyModel = Backbone.Model.extend({
...
sync: function() { alert('yay!); }
});
var model = new MyModel();
model.listenTo('sync','onSync',this);
model.set('somethingToSave','theValueToSaveToServer');
model.save(); // finishes with onSync
如果你想更仔细地控制它,你可以这样称呼它......
model.save({
keyA: this.get('keyA'),
keyB: this.get('keyB')...
}, {
success: function() { alert('success'); },
error: function() { alert('error'); }
});
在你的评论中,你问:
“我在哪里可以请求/团队,因为这是一个不同的宁静网址 与我将用于发布团队数据的/ team url相比?“
是的,我应该更仔细地阅读你的问题。
最简单的方法是在其中一个调用中明确设置url
,fetch
或save
/ sync
。
model.url = function() {
var suffix = '/' + this.id || '';
return '/teams' + suffix;
};
model.savingUrl = function() { return '/team'; };
model.save({
a: this.get('a'),
b: this.get('b')
}, {
url: function() { return this.savingUrl(); },
...
});