2012-04-11 95 views
0

我一直在閱讀並嘗試使用此線程中提出的方法: How to add a custom validation rule to a model in Sencha TouchSencha觸摸2.0:與商店的自定義模型驗證

所以第一,我自定義驗證類型添加到Ext.data.validations單:

if (Ext.data) { 
    Ext.data.validations.custom = function (config, value) { 
     if (config && Ext.isFunction(config.fn)) { 
      //this should be the model 
      if (config.self) { 
       return config.fn.call(config.self, value); 
      } else { 
       return config.fn(value); 
      } 
     } 
     else 
     { 
      return false; 
     } 
    }; 
    Ext.data.validations.customMessage = "Error"; 
} 

然後,因爲我使用ST2,我申請什麼奔摹建議。我擴展Ext.data.Model以包含對「自我」(this)的引用。

Ext.define( 'MyApp.model.CustomModelBase',{ 延伸: 'Ext.data.Model',

//adding an initializer to let custom validators access "self" 
    init : function() { 
     var i, len; 
     if (this.config.validations) { 
      for (i = 0, len = this.config.validations.length; i < len; i++) { 
       this.config.validations[i].self = this; 
      } 
     } 
    } 
}); 

最後,我創建擴展CustomModelBase模型讓我們把這種模式MyApp的.model.MyModel,我定義了一個自定義的驗證規則裏面。

Ext.define('MyApp.model.MyModel', { 
    extend: 'MyApp.model.CustomModelBase', 
    config: { 
     fields: [ {name:'field1'} ], 

     validations: [ 
      { 
       type: 'custom', field: 'field1', message: "Your field is bad", 
       fn: function (value) { 
        **console.log(this);** 
        return (value>0); 
       } 
      }   
     ], 

     proxy: { 
      type: 'localstorage', 
      id : 'MyApp-Local-Storage' 
     }   
    } 
}); 

現在,一切正常創建爲MyModel的一個實例時。

這個問題我當我有MyModel的存儲時。當你這樣做時,在fn函數中收到的對'this'的引用似乎始終是商店中的最新產品。 更確切地說,console.log(this)總是輸出商店的最新Record對象。

我該如何解決這個問題?

更新: 我不知道這是不是因爲所有的商店記錄共享相同的模型實例? 我們可以做些什麼嗎?或者上面描述的所有方法都無法使用商店?

回答