【发布时间】:2013-05-30 22:09:39
【问题描述】:
我正在使用主干本地存储插件创建一个基于主干示例的小型应用程序。
为新模型保存数据时,我总是收到错误“必须指定“url”属性或函数”
在阅读了几个类似的主题后,我仍然无法找到原因。
型号:
directory.models.EmployeeCollection = Backbone.Collection.extend({
localStorage: new Backbone.LocalStorage("EmployeeCollection"),
model: directory.models.Employee,
store: directory.utils.store,
findByName: function(key) {
this.reset(this.store.findByName(key));
}
});
观点:
directory.views.newEmployeeView = Backbone.View.extend({
tagName: "div",
initialize: function() {
this.template = _.template(directory.utils.templateLoader.get('new-employee'));
},
events: {
"click .save": "saveEmployee"
},
render: function(eventName) {
$(this.el).html(this.template(this.model.toJSON()));
return this;
},
saveEmployee: function(event){
this.model.set({
firstName:$('#newFirstName').val(),
lastName:$('#newLastName').val(),
title:$('#newTitle').val(),
city:$('#newCity').val(),
officePhone:$('#newOfficePhone').val(),
cellPhone:$('#newCellPhone').val(),
email:$('#newEmail').val()
});
this.model.save();
window.history.back();
return false;
}
});
【问题讨论】:
-
您的视图的模型属性是否已经是您集合的成员?你能展示一下你是如何在视图上设置模型属性的吗?
-
该模型尚未在收藏中。这是一个新的。 newEmployee: function() {this.slidePage(new directory.views.newEmployeeView({model:new directory.models.Employee()}).render());}
-
...甚至不确定我是否必须实例化集合以及在哪里执行此操作?
-
尝试在你的路由器中创建一个集合的实例,并将它设置在视图上,就像你当前对模型所做的那样。在您看来,您可以执行 this.collection.create({'firstName', firstName, etc. etc})。我认为该模型可能需要与您的收藏相关联,然后才能将其持久化。 create 方法会添加模型并保存。
-
为什么我需要在 .create() 中重复整个 JSON?当我刚刚创建具有这些属性的模型时。难道没有一种简单的方法可以将模型及其所有属性添加到集合中吗?