2012-11-16 39 views
0

摘要:当我尝试提供onsubmitonreset回调给Jeditable时,我得到Object [function] has no method 'apply'错误。向Jeditable提供回调

我是如何到达这里的:我一直致力于a rails plugin to supply Jeditable and jWYSIWYG的在地所见即所得的编辑。开发是由我正在研究的一个Rails项目驱动的,它要求特定的功能。

我添加的一个选项是能够按照this answer中建议的模式,使用按钮而不是点击可编辑文本本身来触发Jeditable的编辑模式。下一步,是在编辑模式下隐藏按钮,并在离开编辑模式时再次显示。

皮很容易;我只在触发功能中添加了一行,它将.toggle()发送到按钮。显示更棘手。我想我需要.toggle()再次提交或取消,并可以帮助Jeditable优惠onsubmitonreset回调。

但是,当我尝试使用这些回调函数时,我得到这个Object [something] has no method 'apply'错误。

我试图:因为这是在Rails帮手的情况下,实际的机制是比这个稍微复杂些,但结果是,我试图按照this pattern,递给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 answer向我暗示,当我期望一个函数时,我会提供一个字符串给Jeditable。但是,因为我在Rails帮助程序的上下文中工作,所以我并不确定如何解决方法 - "showTrigger"位在助手中设置为Ruby变量,虽然window.showTrigger()已定义当窗口加载时,我不知道如何在Ruby变量中指定该函数,以便在页面加载时将其识别为函数。

回答

0

正如我上面提到的ETA,问题确实是传递一个字符串而不是一个函数。我的Rails助手通过采用参数散列并使用.to_json为Jeditable生成参数。这使得字符串函数名成为引用的字符串。为了提供这个参数作为Jeditable可以理解的函数名称,我需要将这些具体参数作为JSON之前的参数。

换句话说,我没有定义一个包含带有函数名称的字符串的Ruby变量,而是使用函数的名称定义了包含JSON对象的Ruby变量。而不是trigger_reset = 'showTrigger'我用trigger_reset = '{ onsave: showTrigger, onreset: showTrigger }'

然后,不是包含该作为args散列,其中散列是用$().extend()加入到args对象在JS另一个说法,我加入trigger_reset变量的值作为第三个参数extend()

当然,事实证明,这一切都被绑定在我原来的问题中没有包含的代码中,所以难怪没有人能提供帮助。对不起,谢谢。