2014-11-04 62 views
1

我有一個驗證方法,用於檢查輸入字段中值的常見驗證,如空檢查,特殊字符檢查。Ember - 如何調用返回值的常用驗證方法

當我使用send('methodName')調用方法時,這不會返回值。

我需要返回一個值,並基於值可以顯示基於結果的消息。

代碼:

指數模板:

{{input value=inputval placeholder='Enter Your Name'}} 

<div class="submitdiv" {{action 'submitValue'}}>Submit Name</div> 

App.js:

App.IndexController = Ember.ArrayController.extend({ 
    inputval: '' 
}); 

App.IndexRoute = Ember.Route.extend({ 
model: function() { 
    return ['Jeevi', 'James', 'Tony']; 
}, 
actions: { 
submitValue: function(){ 
    var self = this; 
    var temp_val = self.controller.get('inputval'); 
    var is_valid = self.send('validateName', temp_val); //Need a value returned from this method call 
    if(is_valid){ 
     self.get('controller').model.addObject(temp_val); 
    } else { 
     alert('Enter a Name'); 
    } 
}, 
validateName: function(val){ // Need to return a value based on the validation result 
    if(val === ""){ 
     return false; 
    } else { 
     return true; 
    } 
} 
} 
}); 

JSBin演示Link

回答

0

您可以使用一個回調,

JS

App.IndexRoute = Ember.Route.extend({ 
    model: function() { 
    return ['Jeevi', 'James', 'Tony']; 
    }, 
    actions: { 
    submitValue: function(){ 
     var self = this; 
     var temp_val =  self.controller.get('inputval'); 
     self.send('validateName', temp_val, function(is_valid){ 
     if(is_valid){ self.get('controller').model.addObject(temp_val); 
    } else { 
     alert('Enter a Name'); 
    } 
     }); 
    }, 
    validateName: function(val,callback){ 
     if(val === ""){ 
     callback(false); 
     } else { 
     callback(true); 
     } 
    } 
    } 
}); 

http://jsbin.com/ziwosepini/1/edit?html,js

這種方法還可以支持AJAX /承諾,如果驗證需要在服務器上進行。

http://jsbin.com/cehabojahe/1/edit?html,js