我注意到,當我有這樣的代碼:http://jsfiddle.net/MtULf/1/Backbone.Model`defaults`干擾`set`?
window.Todo = Backbone.Model.extend({
defaults: {
"title": ""
},
validate: function() {
if (this.get("title") === "")
return "Title is missing!"
}
});
var todo = new Todo();
console.log("Expects blank: ", todo.get("title"));
todo.set({ title: "A valid title" });
console.log("Expects 'A valid title': ", todo.get("title"));
todo.set("title", "");
console.log("Expects blank: ", todo.get("title"));
所有set(...)
似乎失敗:todo.get("title")
總是返回空字符串
但是,如果我刪除defaults
,我得到預期的輸出:http://jsfiddle.net/MtULf/2/
window.Todo = Backbone.Model.extend({
validate: function() {
if (this.get("title") === "")
return "Title is missing!"
}
});
這是問題所在。一旦使用驗證功能創建模型。每套都使用該功能進行驗證。 **如果您在施工期間未指定屬性,**將自動應用默認值。因此'var todo = new Todo();'會使'title =「」'和'todo.set({title:「Valid title」});''會失敗,因爲你的validate函數返回一個錯誤。所有你需要做的就是'var todo = new Todo({title:「New Title」});' – Deeptechtons
我想我失去了你在*和'todo.set({title:「Valid title」})''將失敗,因爲你的驗證函數返回一個錯誤*「。爲什麼要設置'title =「有效標題」'失敗?你的意思是構造函數會失敗或什麼? – jm2
你可能會看看我爲你製作的小提琴http://jsfiddle.net/MtULf/5/ – Deeptechtons