Как перерисовать часть страницы после ajax отправки формы в Lift (Scala) - PullRequest
4 голосов
/ 14 декабря 2011

это, наверное, глупый вопрос, но я не могу понять, как это сделать. Итак, я новичок в Scala / Lift и прочитал главу о формах ajax в http://simply.liftweb.net/index-4.8.html#toc-Section-4.8, но «RedirectTo» в примере не кажется мне очень «ajaxian». Часто в случае отправки формы через ajax, вы бы просто частично перерисовали одну и ту же страницу, верно? Это то, что я пытаюсь сделать, и сейчас у меня ничего не получается. Как мне разрешить Lift перерисовать только часть той же страницы после отправки формы через ajax?

Любые советы будут оценены. Спасибо.

В основном то, что у меня выглядит, выглядит так:

    <div id="main" class="lift:surround?with=default;at=content">
    <h2>Welcome to your project!</h2>
    <div class="lift:Test">
        <div>
            <form class="lift:form.ajax">
                <fieldset>
                    <label for="name">Name:</label>
                    <input id="name" name="name" type=text>
                    <p></p>
                    <input id="save" type="submit" value="Save">
                </fieldset>
            </form>
        </div>
        <div>
            <span id="theName">Name</span>
        </div>
    </div>
</div>

class Test {

  def render = {
    var name = ""

    def process(): JsCmd = {
      Thread.sleep(500)

      S.notice("Entered name is: %s".format(name))
      Noop
    }

    "#theName " #> "This shall be updated with the name given in the form above" & 
    "#name" #> (SHtml.text(name, name = _) ++ SHtml.hidden(process))
  }
}

Как мне обновить "theName" при отправке формы?

Ответы [ 2 ]

2 голосов
/ 14 декабря 2011

Посмотрите на http://lift.la/shtmlidmemoize-simple-ajax-updating ( Пример кода ). Есть SHtml.memoize и SHtml.idMemoize, которые автоматически кэшируют HTML-код. Не уверен, почему он не используется в этом примере в книге «Просто поднять».

0 голосов
/ 25 декабря 2014

У вас есть двухступенчатая форма, верно? Вышеуказанный плакат правильный.

Сохраните ваше преобразование в RequestVar.

в приведенном выше примере вы хотите сохранить метод рендеринга, поэтому сначала запомните преобразование:

 private def renderTest= SHtml.memoize { render }

Затем вы можете сохранить это запомненное преобразование в RequestVar (длится 1 запрос) или, может быть, TransientRequestVar в зависимости от ваших потребностей.

 private object testTemplate extends RequestVar(renderTest)

Если вы хотите воспроизвести преобразование из события ajax - testTemplate.is.applyAgain.

Возможно, я неправильно понял исходный вопрос, потому что, если вы хотите сделать двухэтапную форму, вам не нужно запоминать. Памятка заключается в том, что если что-то изменится в вашей текущей форме, и вы захотите обновить ее с помощью события ajax, т. Е. По щелчку или при изменении, то, как правило, форма не обновится, если вы не отправите ajax.

...