未捕获的ReferenceError:liftAjax未定义

时间:2015-10-01 09:14:07

标签: scala sbt lift

我在Java方面的背景几乎不存在,而且我已经在Scala上阅读并在REPL上玩了几周(我确实有PHP经验)。我刚刚开始尝试使用Scala和Lift框架创建一个简单的Web服务器。

我设法让它运行(使用Windows 7 x64,Java版本:1.8.0_60)。

关注thisthis示例,以下是我从头开始运行服务器所做的工作:

已安装Java 1.8.0_60

使用.msi安装程序安装SBT

创建build.sbt

organization := "org.test"
name := "testproj1"
version := "0.1-alpha"
scalaVersion := "2.11.7"
libraryDependencies ++= {
    val liftVersion = "2.6"
    Seq(
      "net.liftweb" %% "lift-webkit" % liftVersion % "compile",
      "net.liftmodules"   %% "lift-jquery-module_2.6" % "2.9",
      "org.eclipse.jetty" % "jetty-webapp" % "8.1.7.v20120910" % "container,test",
    )
}
enablePlugins(JettyPlugin)

创建project/plugins.sbt

addSbtPlugin("com.earldouglas" % "xsbt-web-plugin" % "2.0.4")

创建project/build.properties

sbt.version=0.13.8

创建src/main/scala/bootstrap/Boot.scala

package bootstrap.liftweb

import net.liftweb._
import net.liftmodules.JQueryModule
import util._
import Helpers._

import common._
import http._
import sitemap._
import Loc._

import code.snippet._

class Boot {
  def boot {
    LiftRules.addToPackages("code")
    val entries = List(
      Menu.i("Home") / "index",
      Menu.i("DynamicTest") / "helloworld",
      Menu.i("Static") / "static" / **
    )
    LiftRules.setSiteMap(SiteMap(entries:_*))
    LiftRules.early.append(_.setCharacterEncoding("UTF-8"))

    LiftRules.htmlProperties.default.set(
      (r: Req) => new Html5Properties(r.userAgent)
    )

    JQueryModule.InitParam.JQuery = JQueryModule.JQuery21Z
    JQueryModule.init()
  }
}

创建src/main/webapp/WEB-INF/web.xml

<web-app>
  <filter>
    <filter-name>LiftFilter</filter-name>
    <display-name>Lift Filter</display-name>
    <description>The Filter that intercepts Lift calls</description>
    <filter-class>net.liftweb.http.LiftFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>LiftFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

然后在cmd,我运行sbt,更新,然后使用jetty:start启动服务器。

一切似乎都很好。我可以做简单的静态页面和站点映射。但是,当我尝试使用Ajax时,我收到了一个JS错误:

  

未捕获的ReferenceError:未定义liftajax

我尝试做的只是使用ajaxcall()进行简单的内容替换。这就是我对helloworld.html的所作所为:

<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
    <title>Dynamic</title>
  </head>
  <body class="lift:content_id=main">

    <p>Bello!</p>
    <div id="main" class="lift:surround?with=default;at=content">
      <script id="jquery" src="/classpath/jquery.js" type="text/javascript"></script>
      This page has dynamic content.
      <div data-lift="HelloWorld">
        <input id="name-input" placeholder="put your name here">
        <input type="submit" value="Submit Name">
        Hello, my dear <span id="name"></span> :)
      </div>
    </div>
    <p>Bubbai</p>
  </body>
</html>

这是src/main/scala/code/HelloWorld.scala

package code.snippet

import net.liftweb._
import util.Helpers._
import http.js._; import JE._; import JsCmds._
import http.SHtml._


class HelloWorld {
  def render = ":submit [onclick]" #> ajaxCall(
    ValById("name-input"), 
    n => SetValById("name", n)
  )
}

(我注意到如果我将脚本标记放在html文件的<head>中,它就不会被包含在内)。我从浏览器中得到的是:

<!DOCTYPE html>
<div id="main">
  <script type="text/javascript" src="/classpath/jquery.js" id="jquery"></script>
  This page has dynamic content.
  <div>
    <input placeholder="put your name here" id="name-input">
    <input onclick="liftAjax.lift_ajaxHandler('F461833963092XQOEYM=' + encodeURIComponent((function() {if (document.getElementById(&quot;name-input&quot;)) {return document.getElementById(&quot;name-input&quot;).value;} else {return null;}})()), null, null, null)"
    value="Submit Name" type="submit">Hello, <span id="name"></span> :)
  </div>
</div>

我见过this question。那里的答案告诉我要启动并运行JQuery模块,我做了。加载了jQuery文件。但当然liftajax中的onclick未在任何地方定义。

所以主要的问题是,liftajax应该从哪里来,以及我为了让它运行而缺少什么?感谢。

0 个答案:

没有答案