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