1

私はbackbone.jsを初めて見ています。現在、モデルの検証を検討していますが、教育テキストから直接取得したこのテストスクリプトでは、期待どおりにエラーイベントが発生していません。

Person = Backbone.Model.extend({
    // If you return a string from the validate function,
    // Backbone will throw an error
    validate: function(attributes) {
        if (attributes.age < 0 && attributes.name != "Dr Manhatten") {
            return "You can't be negative years old";
        }
    },
    initialize: function() {
        alert("Welcome to this world");
        this.bind("error", function(model, error) {
            // We have received an error, log it, alert it or forget it :)
            alert(error);
        });
    }
});

var person = new Person;
person.set({ name: "Mary Poppins", age: -1 });
// Will trigger an alert outputting the error

var person = new Person;
person.set({ name: "Dr Manhatten", age: -1 });
// God have mercy on our souls

これをテストするための私のページは、次のように非常に単純です。

<html>
<body>
    <script type="text/javascript" src="Scripts/jquery-1.9.1.min.js"></script>
    <script type="text/javascript" src="Scripts/underscore-min.js"></script>
    <script type="text/javascript" src="Scripts/backbone-min.js"></script>
    <script type="text/javascript" src="Scripts/test4.js"></script>
</body>
</html>

私が見ているのは、2つの「この世界へようこそ」アラートだけです。何か案は?

4

1 に答える 1

3

ソースコードはおそらく古いバージョンのBackboneに基づいており、Model.validateは時間の経過とともにかなり変更されています。

変更ログから

{validate:true}0.9.10:モデルの検証は、デフォルトでModel#saveでのみ適用され、オプションが渡されない限り、構築時またはModel#setでデフォルトで適用されなくなりました。

validate model.validate(attributes、options)
このメソッドは未定義のままです。JavaScriptで実行できるものがある場合は、カスタム検証ロジックでオーバーライドすることをお勧めします。デフォルトでは、validateは保存前に呼び出されますが、{validate:true}が渡された場合は、設定前に呼び出すこともできます。[...]検証に失敗すると、「無効な」イベントがトリガーされます

それで :

  • 属性を設定するときにモデルを検証するには、validate:trueオプションを使用します
  • invalidイベントにバインドする
  • 非推奨のバインドの代わりにEvents.onを使用します

コードは次のようになります

Person = Backbone.Model.extend({
    // If you return a string from the validate function,
    // Backbone will throw an error
    validate: function(attributes) {
        if (attributes.age < 0 && attributes.name != "Dr Manhatten") {
            return "You can't be negative years old";
        }
    },
    initialize: function() {
        console.log("Welcome to this world");
        this.on("invalid", function(model, error) {
            // We have received an error, log it, alert it or forget it :)
            console.log(error);
        });
    }
});

var person = new Person;
person.set({ name: "Mary Poppins", age: -1 }, {validate:true});
// Will trigger an alert outputting the error

var person = new Person;
person.set({ name: "Dr Manhatten", age: -1 }, {validate:true});

そしてフィドルhttp://jsfiddle.net/nikoshr/udm8A/(必ずコンソールを開いてください、私はalert呼び出しをに変換しましたconsole.log

于 2013-03-19T14:02:06.153 に答える