向杰迪特尔提供回调



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

我是如何做到这一点的:我一直在开发一个rails插件,为所见即所得编辑提供Jedit和jWYSIWYG。开发是由我正在进行的一个Rails项目驱动的,该项目要求特定的功能。

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

藏起来很容易;我只是在触发函数中添加了一行,它将.toggle()发送到按钮。揭示更为棘手。我想我需要在提交或取消时再次使用.toggle(),而且很有帮助的是,Jedit提供了onsubmitonreset回调。

然而,当我尝试使用这些回调时,我会得到这个Object [something] has no method 'apply'错误。

我正在尝试的内容:因为这是在Rails助手的上下文中,实际的机制比这更复杂,但结果是我试图遵循这个模式,在args:中向Jedible提供这个

"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:这个答案告诉我,当Jedit需要一个函数时,我会以某种方式向它提供一个字符串。然而,因为我是在Rails助手的上下文中工作的,所以我根本不知道如何解决这个问题——"showTrigger"位在助手中被设置为Ruby变量,尽管window.showTrigger()是在加载窗口时定义的,但我不知道如何在Ruby变量中指定该函数,以便在页面加载时将其识别为函数。

正如我上面的ETA所建议的,问题确实是传递了一个字符串而不是一个函数。我的Rails助手通过获取一个参数散列并使用.to_json为Jedible生成参数。这使得字符串函数名变成了一个带引号的字符串。为了将这个参数提供为函数名Jedit能够理解的参数,我需要将这些特定的参数作为预先JSON化的参数。

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

然后,我将trigger_reset变量的值作为第三个参数添加到extend(),而不是将其作为args哈希中的另一个参数(其中该哈希是使用$().extend()添加到JS中的args对象的)。

当然,这一切都与我最初的问题中没有包含的代码有关,所以难怪没有人能帮上忙。对不起,还是谢谢你。

相关内容

  • 没有找到相关文章

最新更新