Javascript 使用传递的数据属性调用函数

Javascript 使用传递的数据属性调用函数,javascript,jquery,Javascript,Jquery,我有这样一个表格: <form data-controller="Posts" data-method="admin_add"> 这是基于我在这里读到的内容: 它应该被称为: Posts.admin_addformData 但它不调用函数。。。如果我删除if语句,那么我会得到一个错误,它不是一个函数。。。有什么想法吗?记住,您使用方括号是为了避免使用eval: 完美的不知道双方括号会处理两个变量之间的周期。谢谢。我使用.attr而不是.data,因为.data有时很有趣,attr是

我有这样一个表格:

<form data-controller="Posts" data-method="admin_add">
这是基于我在这里读到的内容:

它应该被称为:

Posts.admin_addformData


但它不调用函数。。。如果我删除if语句,那么我会得到一个错误,它不是一个函数。。。有什么想法吗?

记住,您使用方括号是为了避免使用eval:


完美的不知道双方括号会处理两个变量之间的周期。谢谢。我使用.attr而不是.data,因为.data有时很有趣,attr是访问数据-*属性的正确方法。使用数据的唯一原因是,如果要在元素上存储不应在属性中的数据。@t.J.Crowder,但这不是问题所在。。。我只是放了那个评论,让其他开发人员知道我为什么使用那个方法@卡梅伦:我明白。我只是说,这是正确的方法,你不需要解释什么。遗憾的是,很多人误解了数据……严格来说,最好的方法是这样。getAttributedata-controller-当等价物几乎相同时,没有理由在jQuery上浪费处理器时间。@NiettheDarkAbsol:是否使用jQuery与JavaScript无关。我真希望人们能明白这一点。这是jQuery与DOM的较量,而不是jQuery与vanilla/pure/whatever的较量。不管是JavaScript还是CoffeeScript/TypeScript/Dart。直接重新使用DOM:使用jQuery伪等价物的最大好处是集合论,在集合论中,如果集合是空的,则返回未定义的,而不是抛出。减少了很多防守!==空值。当然,在这种情况下不是这样。
$(document).on('submit', 'form', function(e){

    e.preventDefault(); // there is no server so nothing to submit to

    var formData = $(this).serialize();

    var controller = $(this).attr('data-controller');
    var method = $(this).attr('data-method');
    // I use .attr instead of .data because .data is funny sometimes

    var fnString = controller + '.' + method;
    var fn = window[fnString];

    if (typeof fn === "function") fn(formData);

});
var fn = window[controller][method];
fn(formData);