摘要:当我尝试向Jeditable提供onsubmit
或onreset
回调时,我收到Object [function] has no method 'apply'
次错误。
我是如何到达这里的:我一直致力于a rails plugin to supply Jeditable and jWYSIWYG进行就地所见即所得的编辑工作。开发由我正在研究的Rails项目驱动,该项目要求具体功能。
我添加的选项之一是能够使用按钮触发Jeditable的编辑模式,而不是按照this answer中建议的模式单击可编辑文本本身。但是,下一步是在编辑模式下隐藏按钮,并在离开编辑模式时再次显示它。
隐藏很容易;我刚刚在触发函数中添加了一行,将.toggle()
发送到按钮。揭示更棘手。我想我需要.toggle()
再次提交或取消,并且帮助Jeditable提供onsubmit
和onreset
回调。
但是,当我尝试使用这些回调时,我收到此Object [something] has no method 'apply'
错误。
我正在尝试的内容:因为这是在Rails帮助器的上下文中,实际的机制比这更多涉及,但结果是我试图遵循{ {3}},将jeditable交给args:
"onsubmit":"showTrigger",
然后包含这个脚本:
function showTrigger(settings, original) {
$(".edit_trigger[id='element_id']").toggle();
}
但是,在提交更改或取消编辑时,我收到错误
Object showTrigger has no method 'apply'
......如上所述。
我还尝试直接将函数作为"onsubmit"
参数发送(即"onsubmit": "function(settings, original){$(\".edit_trigger[id='element_id']\").toggle();}"
,然后我改为Object function(settings, original){$(\".edit_trigger[id='element_id']\").toggle();} has no method 'apply'
。
我如何处理此回调一定有问题。有什么想法吗?
ETA:this pattern向我建议,当我想要一个函数时,我会以某种方式向Jeditable提供一个字符串。但是,因为我在Rails帮助器的上下文中工作,所以我完全不确定如何解决这个问题 - "showTrigger"
位被设置为帮助器中的Ruby变量,尽管{{1}在窗口加载时定义,我不知道如何在Ruby变量中指定该函数,以便在页面加载时将其识别为函数。
答案 0 :(得分:0)
正如我上面提到的ETA所说,问题确实是传递了字符串而不是函数。我的Rails助手通过使用参数哈希并使用.to_json
为Jeditable生成参数。这使得字符串函数名称成为带引号的字符串。为了将此参数作为Jeditable理解的函数名提供,我需要将这些特定参数包含在JSON-ified之前的参数中。
换句话说,我没有定义包含带有函数名称的字符串的Ruby变量,而是定义了包含函数名称的JSON对象。而不是trigger_reset = 'showTrigger'
我使用了trigger_reset = '{ onsave: showTrigger, onreset: showTrigger }'
。
然后,不是将此作为另一个参数包含在args
哈希中,而是使用args
将该哈希添加到JS中的$().extend()
对象,我添加了{的值{1}}变量作为trigger_reset
的第三个参数。
当然,事实证明,所有这些都与我原来的问题中没有包含的代码有关,所以难怪没有人可以提供帮助。抱歉,无论如何,谢谢。