2017-04-10 14 views
0

バックボーンモデルに範囲の問題があります。私は、Backbone.Validationオブジェクトの中のモデル関数を参照しようとしています。私はこれを設定することができますどのようにバックボーンモデルスコープの問題(バックボーン検証機能付き)カスタム機能

Backbone.Model.extend({ 

    validation: { 
     firstname: { required: true, msg: _('First Name is required').translate() } 
    , dobday: this.validateDob // this. refers to the immediate object {} 
    , dobmonth: validateDob  // undefined function 
    , dobyear: this.validateDob // How can I access the function validateDob? 
    } 

, validateDob: function(value) { 
     var selDay = $('select[name="dobday"] option:selected').val(); 
     var selMonth = $('select[name="dobmonth"] option:selected').val(); 
     var selYear = $('select[name="dobyear"] option:selected').val(); 

     if (!Utils.isAdult(selDay, selMonth, selYear)) 
      return _('You have to be at least 18 years old.').translate(); 
    } 
}); 

何かアドバイス:

すなわち、私はvalidationオブジェクト/マップの中からモデル関数validateDobにアクセスカント?

+0

このメソッドを呼び出す方法:その場合は

、あなたがbackbone.validationプラグインを使用していると仮定すると、あなたは、検証の設定などを返す関数を定義することができますか?試してみてください 'dobday:this.validateDob()' –

+1

どの検証プラグインを使用していますか? –

答えて

0

あなたはvalidateDobは、次のようにので、あなたはそれという名前の関数にすることができ、インスタンスへのアクセスを必要としない、あなたのコードを見てみると、この

Backbone.Model.extend({ 
    validation: { 
     firstname: { required: true, msg: _('First Name is required').translate() } 
    }, 
    initialize:function() { 
     this.validation.dobyear= this.validateDob; 
     //you can other props similarly 
    }, 
    validateDob: function(value) { 
     var selDay = $('select[name="dobday"] option:selected').val(); 
     var selMonth = $('select[name="dobmonth"] option:selected').val(); 
     var selYear = $('select[name="dobyear"] option:selected').val(); 

     if (!Utils.isAdult(selDay, selMonth, selYear)) 
      return _('You have to be at least 18 years old.').translate(); 
    } 
}); 
1

を試すことができます。

function validateDob(value) { 
    var selDay = $('select[name="dobday"] option:selected').val(); 
    var selMonth = $('select[name="dobmonth"] option:selected').val(); 
    var selYear = $('select[name="dobyear"] option:selected').val(); 

    if (!Utils.isAdult(selDay, selMonth, selYear)) 
    return _('You have to be at least 18 years old.').translate(); 
} 

Backbone.Model.extend({ 
    validation: { 
    firstname: { 
     required: true, 
     msg: _('First Name is required').translate() 
    }, 
    dobday: validateDob, 
    dobmonth: validateDob, 
    dobyear: validateDob 
    }, 
    validateDob: validateDob 
}); 

しかし、グローバルセレクタを使用してDOMから直接値にアクセスすることはお勧めできません。これらの値は、要素を表示するためにスコープされたセレクタを使用してモーダル属性に設定する必要があります。

Backbone.Model.extend({ 
    validation: function() { 
    return { 
     firstname: { 
     required: true, 
     msg: _('First Name is required').translate() 
     }, 
     dobday: this.validateDob, // this should be modal instance now 
     dobmonth: this.validateDob, 
     dobyear: this.validateDob 
    } 
    }, 
    validateDob: function(value) { 
    // Now context should be the modal instance so you can do this.get('prop') 
    var selDay = $('select[name="dobday"] option:selected').val(); 
    var selMonth = $('select[name="dobmonth"] option:selected').val(); 
    var selYear = $('select[name="dobyear"] option:selected').val(); 

    if (!Utils.isAdult(selDay, selMonth, selYear)) 
     return _('You have to be at least 18 years old.').translate(); 
    } 
});