骨干验证和回调

时间:2015-09-09 16:32:36

标签: javascript jquery backbone.js

任何人都可以帮助我,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;
}

1 个答案:

答案 0 :(得分:0)

代码中存在两个问题。 1.验证函数仅验证attr候选者,这里的“this”对象是模糊的,它可能不是模型。因此this.detect未定义。您可能必须在下划线中使用绑定函数。

  1. 验证功能在设置属性之前技术上运行。所以,即使你可以成功调用detect函数,当你执行this.attributes时,你会得到一个空集。所以你无法发现任何东西。最好尝试将这些函数设置为静态,这意味着它们不会引用“this”
  2. 我做了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”。并且检测功能已成功运行。那问题是什么?