调用直接在比较中返回值的函数是不好的做法吗?
我有这个coffeescript代码在我的开发环境中运行良好,但在服务器上它不起作用。它看起来像这样。
$.validator.addMethod "fullName", (value, element) ->
num_words = (value) ->
parts = value.split(" ")
remove_empty = $.inArray("", parts)
parts.splice remove_empty if remove_empty isnt -1
return parts.length
num_words(value) > 1
, "Please enter your first and last name"
JQuery validate调用此函数num_words并返回条件num_words(value) > 1
是否会失败,因为我在比较中直接调用该函数而不是先将其赋值给变量?
答案 0 :(得分:1)
coffeescript中的所有内容都被视为表达式,因此您使用该语言没有任何问题,但我认为您的代码可能会遗漏一些边缘情况。
由于您使用的是coffeescript,您是否会考虑以下蓝图(您可能需要针对您的特定用例略微调整验证):
window.validators ?= {} # just a namespace
class validators.NameValidator
isValidString = (s)-> /\w+/.test(s)
constructor: (@names)->
@validStrings = $.grep(@names, isValidString)
isValid: -> @validStrings.length > 1
# wrapper for the class
checkNames = (value, element)->
validator = new validators.NameValidator(value.split(" "))
validator.isValid()
$.validator.addMethod("fullName", checkNames, "Please enter your first and last name")
基于@ sparky http://jsfiddle.net/53kh1L4s/4/
的工作小提琴答案 1 :(得分:0)
你的CoffeeScript converted回到普通的JavaScript就是这个......
$.validator.addMethod("fullName", function(value, element) {
var num_words;
num_words = function(value) {
var parts, remove_empty;
parts = value.split(" ");
remove_empty = $.inArray("", parts);
if (remove_empty !== -1) {
parts.splice(remove_empty);
}
return parts.length;
};
return num_words(value) > 1;
}, "Please enter your first and last name");
既然我可以更好地阅读它(我不知道CoffeeScript ),我不明白为什么它如此冗长。您不需要num_words
方法函数中的fullName
函数。尽管冗长,as plain JavaScript, it still works。显然,这是CoffeeScript在您编写时无法处理的情况。
然而,这个版本的工作方式完全相同,但它更短更简洁......
$.validator.addMethod("fullName", function(value, element) {
var parts = value.split(" "),
remove_empty = $.inArray("", parts);
if (remove_empty !== -1) {
parts.splice(remove_empty);
}
return parts.length > 1;
}, "Please enter your first and last name");
工作演示:http://jsfiddle.net/53kh1L4s/
我在这里看不到问题,毕竟,因为它只是从一个地方调用,所以在num_words
方法函数中拥有fullname
函数绝对没有优势。 / p>
和converted back加入CoffeeScript ......
$.validator.addMethod "fullName", ((value, element) ->
parts = value.split(" ")
remove_empty = $.inArray("", parts)
parts.splice remove_empty if remove_empty isnt -1
parts.length > 1
), "Please enter your first and last name"
工作演示(CoffeeScript):http://jsfiddle.net/xyxq2c73/