1

デフォルトのバックボーン モデル変数 (Backbone.Model) を上書きして、独自のカスタム検証メソッド (isValid、validate) を使用し、いくつかのプロパティを追加したいと考えています。

_.extend(Backbone.Model, {
    isValid: function() { // custom function },
    validate: function() { // custom logic }
});

var myModel = Backbone.Model.extend({
   // this adds for example properties to my modified Backbone model.
});

残念ながら、これは機能しません...「ラッパー、拡張」モジュールをrequirejsでロードし、新しいモデルインスタンスを作成してから、検証を呼び出します。検証機能を知らないと言っています...

4

3 に答える 3

4

すべてのメソッドはモデルのプロパティではなくコンストラクタ関数のプロトタイプ メソッドであるため、Backbone.Model.prototypeそれ自体ではなく拡張する必要があります。Backbone.ModelBackbone.Model を拡張するカスタム BaseModel を作成し、カスタム ロジックを実装することをお勧めします。これにより、バックボーンが更新された場合などに競合の可能性を回避できます。基本バックボーン クラスを変更するのではなく、拡張することを練習してください。

于 2012-07-16T06:50:13.187 に答える
1

OOPではない「上書き」ではなく、プロジェクトのカスタムモデルを実行することを好みます。(最終的には同じかもしれませんが、OOP をエミュレートしようとすると、そのほうが理解しやすいと思います)。

私の例を確認してください。Backbone.Model の一種の拡張である YourAbstractModel を定義すると、すべてのモデルが Backbone Model の代わりにその抽象モデルを拡張します。

var YourProject = {};
YourProject.YourAbstractModel = Backbone.Model.extend({
    customProperty1 : null, 
    customProperty2 : null, 
    isValid : function(){ },    
    specificUtility : function(){ } 
});

var YourModel1 = YourProject.YourAbstractModel.extend({
    customProperty1 : 'aaaaa'
});
var YourModel2 = YourProject.YourAbstractModel.extend({
    customProperty1 : 'bbbbb'
});

console.log( new YourModel1().customProperty1 );
console.log( new YourModel2().customProperty1 );

私の方法は、複数の抽象モデルを持つことにも柔軟であり、バックボーンの更新と競合せず、継承可能なプロセスに近いと感じています。

于 2012-07-16T14:36:16.483 に答える
0

Thedersen https://github.com/thedersen/backbone.validationで Backbone.Validation プラグインを使用できます。

とても便利で使いやすいです。また、検証に失敗した特定のモデル プロパティの custom-error 属性がビューに含まれるように、ビューをモデルにバインドすることもできます。

于 2012-09-20T18:20:20.053 に答える