Backbone js显示旧款
Backbone js displays old models
我是 backbone 的新手,现在遇到 backbone js 和 backbone.validation 的问题。这是我的代码:
var EmployeeCreateView = Backbone.View.extend({
el: "#page_content",
initialize: function() {
console.log("initializing....");
this.model = new EmployeeModel();
console.log(this.model);
this.render();
},
render: function() {
Backbone.Validation.bind(this);
this.$el.html(EmployeeCreateTemplate);
},
events: {
"click #submit-employee": "submitEmployee"
},
submitEmployee: function(e) {
e.preventDefault();
var data = Backbone.Syphon.serialize(this);
this.model.set(data, { validate: true });
console.log(this.model);
if (!this.model.isValid()) {
_.each(this.model.validationError, function (error) {
});
} else {
this.model.save(null, {
success: function() {
new EmployeeCollectionView();
},
error: function(model, response) {
this.$el.html(ErrorTemplate)({
error: response.responseText
});
}
});
}
}
});
当我转到此页面时,console.log() 显示一个模型,这很好。但是当我离开页面并再次返回时,初始化中的 console.log() 显示一个模型,这就是我想要的。但是 submitEmployee() 函数中的 console.log 显示了两个模型。这是控制台输出:
// first page load, shows a single object
initializing....
n {cid: "c2", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…}
// other page load
[n, n, n, n, n]
// back to original page, shows a new object
initializing....
n {cid: "c10", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…}
// submit still sees both objects, which i don't want
n {cid: "c2", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…}
n {cid: "c10", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…}
任何人都可以告诉我我做错了什么吗?
谢谢!
你有僵尸对象 - 应该清理的对象,但由于引用而徘徊,稍后突然出现咬你。
部分问题在于您管理视图的方式。让视图渲染本身不是一个好主意。让一个视图创建一个子视图来呈现自己来替换当前视图是一个更糟糕的主意。您看到的问题是此代码结构的直接结果。
我推荐两篇文章作为开头:
managing page transitions in Backbone.js
和
我是 backbone 的新手,现在遇到 backbone js 和 backbone.validation 的问题。这是我的代码:
var EmployeeCreateView = Backbone.View.extend({
el: "#page_content",
initialize: function() {
console.log("initializing....");
this.model = new EmployeeModel();
console.log(this.model);
this.render();
},
render: function() {
Backbone.Validation.bind(this);
this.$el.html(EmployeeCreateTemplate);
},
events: {
"click #submit-employee": "submitEmployee"
},
submitEmployee: function(e) {
e.preventDefault();
var data = Backbone.Syphon.serialize(this);
this.model.set(data, { validate: true });
console.log(this.model);
if (!this.model.isValid()) {
_.each(this.model.validationError, function (error) {
});
} else {
this.model.save(null, {
success: function() {
new EmployeeCollectionView();
},
error: function(model, response) {
this.$el.html(ErrorTemplate)({
error: response.responseText
});
}
});
}
}
});
当我转到此页面时,console.log() 显示一个模型,这很好。但是当我离开页面并再次返回时,初始化中的 console.log() 显示一个模型,这就是我想要的。但是 submitEmployee() 函数中的 console.log 显示了两个模型。这是控制台输出:
// first page load, shows a single object
initializing....
n {cid: "c2", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…}
// other page load
[n, n, n, n, n]
// back to original page, shows a new object
initializing....
n {cid: "c10", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…}
// submit still sees both objects, which i don't want
n {cid: "c2", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…}
n {cid: "c10", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…}
任何人都可以告诉我我做错了什么吗?
谢谢!
你有僵尸对象 - 应该清理的对象,但由于引用而徘徊,稍后突然出现咬你。
部分问题在于您管理视图的方式。让视图渲染本身不是一个好主意。让一个视图创建一个子视图来呈现自己来替换当前视图是一个更糟糕的主意。您看到的问题是此代码结构的直接结果。
我推荐两篇文章作为开头:
managing page transitions in Backbone.js
和