0

我注意到当我有如下代码时:http: //jsfiddle.net/MtULf/1/

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!"            
    }
});
4

1 回答 1

2

validate 没有获取模型,因为它是上下文,因此您需要使用函数属性,然后它按预期工作(除了 validate 防止标题设置为空白)

http://jsfiddle.net/MtULf/3/

不,这不是真的,是吗.. validate 确实获取了模型作为它的上下文,但是 validate 在模型中设置值之前运行,因此当默认设置为“”时它总是失败,但没有默认成功,因为未定义!=== ""。

好的,我想我当时明白了。。

于 2012-06-06T04:23:46.653 回答