2013-06-06 2 views
0

Я знаю, что я могу запустить скрипт, подав ajaxText таким образом:Liftweb: как выполнить метод «Ла Скала» после того, как ajaxText представить

SHtml.ajaxText(myVar, (str) => myVar = str, "onsubmit" -> "myScript();") 

То, что я хотел бы сделать, это выполнить метод SCALA вместо ,

Очевидно

SHtml.ajaxText(myVar, (str) => myVar = str, "onsubmit" -> myMethod) 

не работает.

Есть ли способ, которым я могу это сделать?

ответ

2

Ваш ответ выглядит хорошо для меня, но если вы не хотите, чтобы что-то произошло после выполнения, вам не нужно делать JsCmd. Например:

SHtml.ajaxText(myVar, (str) => { 
    myVar = str 
    myMethod() 
    JsCmds.Noop 
}) 

Где JsCmds.Noop, это почти так же, как выдача return в простом JavaScript, поэтому функция возвращает, ничего не делая. Я поместил кодовый блок в ряд для краткости, но вы также можете просто сделать то, что вы сделали с (str) => f(str), и вернуть свой метод JsCmds.Noop.

+0

отлично! Как всегда jcern имеет ответ :) –

+0

Рад, что я могу продолжать помогать. Поскольку у вас есть другие вопросы, просто спросите, и мы сделаем все возможное, чтобы помочь. – jcern

1

Я нашел способ, но не настолько чист.

, так как функция (str) => myVar = str также выполняется на представить, что это то, что я сделал:

def f(str:String):JsCmd = { 
    myVar = str 
    myMethod() 
    SetHtml("msg_div",<span> method executed </span>) 
} 

SHtml.ajaxText(myVar, (str) => f(str)) 

Таким образом, каждый раз, когда я представляю модификацию в ajaxText myMethod выполняется, но я вынужден вернуть часть JsCmd от функции f.

Если вы найдете лучший способ сделать это, дайте мне знать, пожалуйста.

+1

Кстати, вы можете сократить '(str) => f (str)' до 'str => f (str)' только для планирования 'f _'. (На самом деле вам может даже не понадобиться '_'. Вы, разумеется, не будете нуждаться в нем, если напишите' def' (или 'val')' f = {str: String => '... – nafg