我想用backbone.js做一个基本的CRUD应用程序。所以我想从服务器列出一些东西,创建和编辑它们。
这就是我理解这一点:
我的Model
和Collection
都包含网址。该集合将获取数据,模型将创建/保存()数据。
View
处理所有交互,例如调用collection.fetch或model.save,然后在成功后将模型添加到集合中。
模型和集合上的url属性对我来说似乎是重复的代码。这是进行服务器交互的正确方法吗?
这就是我的结构参考:
window.User = Backbone.Model.extend({
initialize: function () {
},
defaults:
{
Name: '',
Age: 0,
Items: []
}
});
window.UserList = Backbone.Collection.extend({
model: User,
url: "/Users"
});
window.UserView = Backbone.View.extend({
el: 'body',
collection: new window.UserList,
template: _.template($('#user-view-template').html()),
events: { "submit form#newUser": "addItem" },
initialize: function () {
_.bindAll(this, 'render', 'update', 'addItem');
this.collection.bind('refresh', this.render);
this.collection.bind('change', this.render);
this.update();
},
render: function () {
$("#sup").html(this.template({ users: this.collection.toJSON() }));
return this;
},
update: function () {
this.collection.fetch();
},
addItem: function (e) {
e.preventDefault();
var person_attrs = $(e.target).serializeObject();
this.collection.create(person_attrs, {
success: function (saved_person, data) {
if (data.Result == "Success") {
alert("success");
}
else {
alert(data.Message);
}
},
error: function (aborted_person, response) {
alert("Server Error");
}
});
return false;
}
});
window.View = new window.UserView;
答案 0 :(得分:2)
为了灵活性,Model和Collection都有一个url。
默认情况下,模型将根据集合中定义的url及其id构建其url,但如果您需要替代行为或模型存在于集合之外,则可以覆盖此功能。
Backbone非常适合RESTful apis。 RESTful api中的示例资源可以是:
狗
其中
Backbone中的相应内容可能是
所以如果你有一个新的模型对象fido = new DogModel({name:'fido'}) 你怎么保存它?
你有两个选择:
答案 1 :(得分:0)
您不需要模型上的url属性。就在收藏品上。如果您在集合上有一个网址
/foo
和带
的模型id = 76
然后只要模型是集合的一部分,它就可以找出它自己的宁静网址
/foo/76
您只需要调用model.save。无需直接与服务器“通信”。 Backbone.js负责处理HTTP动词的选择以使用