任何人都可以帮助我,Javascript采取的功能'检测'作为未定义,我们如何从回调中返回值以检测函数?
validate: function (attrs, options) {
if (!this.detect(attrs.selectedFile, this.onComplete)) {
return "this is an error message";
}
},
detect: function (file, callback) {
var attributes = this.attributes,
image = new Image();
image.onload = function () {
if (condition_is_false_return_false) {
callback(false);
} else {
callback(true);
}
};
image.src = URL.createObjectURL(file);
},
onComplete: function (value) {
return value;
}
答案 0 :(得分:0)
代码中存在两个问题。 1.验证函数仅验证attr候选者,这里的“this”对象是模糊的,它可能不是模型。因此this.detect未定义。您可能必须在下划线中使用绑定函数。
我做了jsfiddle,
var myOwnModel=Backbone.Model.extend({
initialize:function(model,options){
Backbone.Model.prototype.initialize.apply(this,arguments);
},
validate: function (attrs, options) {
console.log("doing validate",attrs);
if (!this.detect(attrs.selectedFile, this.onComplete)) {
return "this is an error message";
}
},
detect: function (file, callback) {
var attributes = this.attributes,
image = new Image();
console.log("running detect",attributes) // Here attributes does not have the new attr.
image.onload = function () {
if (condition_is_false_return_false) {
callback(false);
} else {
callback(true);
}
};
image.src = URL.createObjectURL(file);
},
onComplete: function (value) {
return value;
}
})
var a=new myOwnModel({a:1})
a.fetch();
// or test it with
a.set({b:1},{validate:true});
console.log(a)
看起来验证确实可以访问“this”。并且检测功能已成功运行。那问题是什么?