簡體   English   中英

骨干驗證自定義功能的骨干模型范圍問題

[英]Backbone Model Scope Issue with Backbone Validation Custom Function

我的骨干網模型存在范圍問題。 我試圖引用Backbone.Validation對象內的模型函數。

即,我無法從validation對象/映射中訪問模型函數validateDob

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();
    }
});

有什么建議可以設置嗎?

查看您的代碼, validateDob不需要訪問實例,因此您可以將其命名為如下所示的函數:

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訪問值。 您應該使用作用於視圖元素的選擇器將這些值設置為模態屬性。

在這種情況下,假設您使用的是ribs.validation插件,則可以定義一個返回驗證配置的函數,如下所示:

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();
  }
});

你可以試試這個

 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();
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM