2012-09-25 55 views
0

我正在寫一個指令來幫助驗證字段。它正在努力保存驗證結果。從循環創建多個級別的json

我想將它保存在一個物體像error.password.old

代碼來做到這一點是這樣的:

if(!(typeof iAttrs.ngModel == "undefined")) 
{ 
    var model = iAttrs.ngModel.split('.'); 
    var length = model.length; 
    var target = scope.error; 

    if(typeof validation[iAttrs.validate] == "function") 
    { 
     for(var index = 0; index < length; index++) 
     { 
      target = target[model[index]]; 
     } 
     target = validation[iAttrs.validate](); 
     scope.$apply(); 
    } 
    else throw("function " + iAttrs.validate + " does not exist."); 
} 

iAttrs.ngModel是持有 「password.old」。

目前谷歌拋出:

Uncaught TypeError: Cannot read property 'old' of undefined

這是在for循環的第二次迭代拋出。

我知道它是未定義的,但我需要找到一種方法來定義它,而不用正常的{}符號。

+0

此行是混淆了我:'目標=目標[模型[指數];'。你每次用'target'的一部分通過循環覆蓋'target'? – lbstr

+0

我會看看核心表單/ ng-form/ng-model系統:http://docs.angularjs.org/api/ng.directive:form因爲已經有了驗證,它肯定是可擴展的。 – Guillaume86

回答

0

我正在使用下面的代碼來做到這一點。

function createObj(str) { 

      var d = str.split("."), j, o = scope.error; 
      for (j = 0; j < d.length; j = j + 1) { 
       o[d[j]] = o[d[j]] || {}; 
       o = o[d[j]]; 
      } 
      return o; 
     } 

    createObj(iAttrs.ngModel);