我正在使用play框架来生成分块响应.代码是:
class Test extends Controller {
public static void chunk() throws InterruptedException {
for (int i = 0; i < 10; i++) {
String data = repeat("" + i, 1000);
response.writeChunk(data);
Thread.sleep(1000);
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用浏览器访问时http://localhost:9000/test/chunk,我可以看到显示的数据每秒都在增加.但是,当我编写一个javascript函数来接收和处理数据时,发现它将阻塞直到收到所有数据.
代码是:
$(function(){
$.ajax(
"/test/chunked",
{
"success": function(data, textStatus, xhr) {
alert(textStatus);
}
}
);
});
Run Code Online (Sandbox Code Playgroud)
收到所有数据后,我可以看到10秒后弹出一个消息框.
如何获取流并及时处理数据?
我在scala模板中的代码:
@session.get("user.id") match {
case Some(_) => "xx"
case _ => "yy"
}
<a href="">Logout</a>
Run Code Online (Sandbox Code Playgroud)
但是case ...直接显示在生成的html页面上:
match { case Some(_) => "xx" case _ => "yy" } Logout
Run Code Online (Sandbox Code Playgroud)
在生成的.template.scala中,它是:
"""
<body>
"""),_display_(Seq(/*11.4*/session/*11.11*/.get("user.id"))),format.raw/*11.26*/(""" match """),format.raw("""{"""),format.raw/*11.34*/("""
case Some(_) => "xx"
case _ => "yy"
"""),format.raw("""}"""),format.raw/*14.4*/("""
<a href="">Logout</a>
"""
Run Code Online (Sandbox Code Playgroud)
但我在文档中看到它应该支持match case:https://github.com/playframework/Play20/wiki/ScalaTemplates
@connected match {
case models.Admin(name) => {
<span class="admin">Connected as admin (@name)</span>
}
case models.User(name) => {
<span>Connected as @name</span>
}
}
Run Code Online (Sandbox Code Playgroud)
UPDATE1
最后,我找到了一种工作方式: …
我正在使用猫鼬来操作mongodb.现在,为了测试,我想通过本机连接将一些数据插入到mongodb中.
但问题是如何在插入后获取生成的id?
我试过了:
var mongoose = require('mongoose');
mongoose.connect('mongo://localhost/shuzu_test');
var conn = mongoose.connection;
var user = {
a: 'abc'
};
conn.collection('aaa').insert(user);
console.log('User:');
console.log(user);
Run Code Online (Sandbox Code Playgroud)
但它打印:
{ a: 'abc' }
Run Code Online (Sandbox Code Playgroud)
没有_id领域.
我有一个活动,这是一个单一任务:
public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
System.out.printf("### MyAcitvity.onCreate: " + getIntent().getExtras());
}
@Override
protected void onResume() {
super.onResume();
System.out.println("### MyActivity.onResume: " + getIntent().getExtras());
}
public void toNext(View v) {
startActivity(new Intent(this, AaaActivity.class));
}
}
Run Code Online (Sandbox Code Playgroud)
和:
<activity android:name=".MyActivity" android:launchMode="singleTask" />
Run Code Online (Sandbox Code Playgroud)
不,它已经开始了,它开始了另一个叫做的活动AaaActivity.
public class AaaActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.aaa);
}
public void jumpToFirst(View v) {
Intent intent = new Intent(this, MyActivity.class);
intent.putExtra("aaa","bbb");
startActivity(intent);
} …Run Code Online (Sandbox Code Playgroud) 在html文件中,有一些代码使用自定义模板语言:
<script type="text/javascript">
function ($scope, JsRoutes) {
$scope.rows = [
${"#{list rows, as: 'row', separator: ','}"}
{
#{list fieldConfigs, as: 'f', separator: ','}
${f.name} : ${'$'}{row.${f.name}.toJson()}#{/list}
}
${'#{/list}'}
]
}
</script>
Run Code Online (Sandbox Code Playgroud)
是否可以配置intellij-idea不格式化它(但格式化文档的其他部分)?由于想法会使格式化后难以阅读:
<script type="text/javascript">
function ($scope, JsRoutes) {
$scope.rows = [
${"#{list rows, as: 'row', separator: ','}"}
{
#{list fieldConfigs, as: 'f', separator: ','}
${f.name} :
${'$'}{
row.${f.name}.toJson()
}#{/list}
}
${'#{/list}'}
]
}
</script>
Run Code Online (Sandbox Code Playgroud) 我是红宝石的新手,我想知道我是否只能使用一行来完成这项工作.
以此网站的"搜索"为例.当用户输入时[ruby] regex,我可以使用以下代码来获取标记和关键字
'[ruby] regex' =~ /\[(.*?)\](.*)/
tag, keyword = $1, $2
Run Code Online (Sandbox Code Playgroud)
我们可以把它写成一行吗?
UPDATE
非常感谢!我可以更难,更有趣的是,输入可能包含多个标签,例如:
[ruby] [regex] [rails] one line
Run Code Online (Sandbox Code Playgroud)
是否可以使用一行代码来获取tags数组和关键字?我试过了,但都失败了.
我可以写这样的代码:
str match {
case s if s.startsWith("!!!") => s.stripPrefix("!!!")
case _ =>
}
Run Code Online (Sandbox Code Playgroud)
但我想知道有没有更好的解决方案.例如:
str match {
case "!!!" + rest => rest
case _ =>
}
Run Code Online (Sandbox Code Playgroud) 我知道play1有一个,但我找不到play2.
我希望插件可以自动将模板编译为scala代码.现在不方便.
我定义了一些路线:
angular.module('myApp', [])
.config('$routeProvider', function($routeProvider) {
$routeProvider.when('/aaa', { templateUrl: '/111.html' })
.when('/bbb', { templateUrl: '/222.html'});
});
Run Code Online (Sandbox Code Playgroud)
我想在用户更改路线时获取路线名称:
angular.module('myApp')
.run(['$rootScope', function($rootScope) {
$rootScope.$on('$routeChangeSuccess', function(scope, current, pre) {
// how to get current route name, e.g. /aaa or /bbb
console.log('Current route name: ' + ???);
}
}]);
Run Code Online (Sandbox Code Playgroud)
但我不知道如何得到它.我可以得到templateUrl,但不是路线名称.
UPDATE
一个更复杂的用例:
$routeProvider.when('/users/:id', { templateUrl: '/show_user.html' })
Run Code Online (Sandbox Code Playgroud)
如果当前路径是:
/users/12345
Run Code Online (Sandbox Code Playgroud)
它应匹配/users/:id,但我如何知道哪条路线匹配并获得路线名称/users/:id?
在anorm中使用"in"子句似乎并不容易:
val ids = List("111", "222", "333")
val users = SQL("select * from users where id in ({ids})").on('ids-> ???).as(parser *)
Run Code Online (Sandbox Code Playgroud)
如何更换???零件?
我试过了:
on('ids -> ids)
on('ids -> ids.mkString("'","','","'"))
on('ids -> ids.mkString("','")
Run Code Online (Sandbox Code Playgroud)
但都没有效果.
我在讨论中看到了完全相同的问题:https://groups.google.com/d/topic/play-framework/qls6dhhdayc/discussion,作者有一个复杂的解决方案:
val params = List(1, 2, 3)
val paramsList = for ( i <- 0 until params.size ) yield ("userId" + i)
// ---> results in List("userId0", "userId1", "userId2")
User.find("id in ({%s})"
// produces "id in ({userId0},{userId1},{userId2})"
.format(paramsList.mkString("},{"))
// produces Map("userId0" -> …Run Code Online (Sandbox Code Playgroud)