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 に答える