我正在尝试使用Backbone和API.
默认的API响应格式为:
{
somemetadatas:xxx ,
results:yyy
}
Run Code Online (Sandbox Code Playgroud)
无论是单个模型还是集合的获取.
据我所知,我可以用以下方式覆盖Backbone parse
功能:
parse: function (response) {
return response.results;
},
Run Code Online (Sandbox Code Playgroud)
但我在文档中看到:
解析
collection.parse(response)
只要服务器在fetch中返回集合的模型,Backbone就会调用parse.该函数传递给原始
response
对象,并应返回要添加到集合中的模型属性数组.默认实现是无操作,只是通过JSON响应.如果您需要使用预先存在的API,或者更好地命名您的响应,请覆盖此项.请注意,之后,如果您的模型类已经有一个parse
函数,它将针对每个获取的模型运行.
所以,如果我对这样的集合提取有响应:
{
somemetadatas:xxx ,
results:[user1,user2]
}
Run Code Online (Sandbox Code Playgroud)
parse
集合中的第一个函数将被提取[user1,user2]
.
但是医生说:
请注意,之后,如果您的模型类已经有一个
parse
函数,它将针对每个获取的模型运行.
所以它会试图找到response.results;
在user1
和user2
我需要模型和集合上的解析函数,因为模型和集合数据都在结果属性下.
但是如果我获取集合,我不希望模型解析函数再次用于单个数组元素.
那么这个问题有解决方案吗?
我想到了一个解决方案,我的集合解析函数将转换为这样的东西:
{
somemetadatas:xxx ,
results:[user1,user2]
}
Run Code Online (Sandbox Code Playgroud)
进入这样的事情:
[ {results.user1} , {results.user2} ]
Run Code Online (Sandbox Code Playgroud)
这样模型解析函数就不会在集合提取上失败.但它有点hacky ......这个问题有没有优雅的解决方案?
顺便说一句,因为我的API总是会生成这个表单的结果,所以我可以默认覆盖parse
所有模型和集合的功能吗?(对不起,我是JS菜鸟......)
我主要使用Scala和JavaScript等编程语言.我试图理解在两种语言中如何使用异步响应式编程的相似点和不同点.你能帮助我吗?
我没有采用任何特定的Js Promise
框架,因为它似乎很多实现了类似的规范(如Promise/A).到目前为止我只使用过Q.
似乎在Javascript中我们称之为Deferred
我们解决的对象来完成一个Promise
.在Scala中,似乎Promise
是你决定获得Future
monad 的对象.
有人可以告诉我这是对的吗?Promise
在Js和Scala之间使用不同术语有什么好的理由吗?
此外,在Scala中,我们通常Future
使用像(map
和Haskell)这样的运算符进行进一步计算来链接monad .在Js中这些相当于什么?flatMap
bind
我可能是错的,但在我看来,在JS中的then
一个Promise
种类同时处理的map
和flatMap
运营商吗?如果是这样,是否有可能获得一个promise of promise of result
in Js?就像我们可以Future[Future[Result]]
在Scala中获得一个(Future[Result]
无论如何都可以扁平化).
Js Promise
是monad吗?即使方法名称与我们在monad文献中找到的名称不匹配,它似乎也是如此.
我习惯在Hibernate中使用Criteria API,只是看看JPA 2.0中的Criteria如何工作.
我最喜欢的Hibernate标准是我们必须轻松地与Criterions合作.
JPA Criteria对我来说似乎相当沉重,并不像Hibernate Criteria那样流畅.对我来说,与Hibernate相比的一个主要好处似乎是使用了元模型(Entity_.java类),但是由于你必须维护2个类,或者添加一个注释处理器(尽管很容易),它仍然有点沉重.与maven插件集成)
我已经阅读了一篇关于SpringSource的博客,该博客允许使用"JPA Predicates"降低编写的复杂性,并且有点像Hibernate中的Criterions.
Querydsl项目似乎很有趣.
http://blog.springsource.com/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/
只是想知道,对于那些使用JPA2的人来说,你使用的是Criteria API还是对你来说有点太重了?
对于熟悉Hibernate Criteria并且现在使用JPA Criteria的人来说,您最喜欢Dowhich方法,为什么?
您是否考虑使用或使用Querydsl或Spring Specifications over JPA2等框架来构建查询谓词?您认为这些框架是否足够成熟以至于被采用?
我已经阅读了整本SCJP6书籍Sierra和Bates的书,考试成绩为88%.
但是,我仍然没有听说过这种代码是如何工作的,因为它在泛型章节中没有解释:
Collections.<TimeUnit>reverseOrder()
Run Code Online (Sandbox Code Playgroud)
这种仿制药的用法是什么?我在一些代码中发现它但从未读过任何关于它的内容.在我看来它允许给类型推断一些帮助.我试图搜索一下,但这并不容易找到(而且它甚至不在SCJP书/考试中!)
那么有人可以给我一个正确的解释它是如何工作的,这些都是用例等吗?
谢谢
编辑 感谢您的答案,但我期待更多细节:)所以如果有人想添加一些额外的信息:
更复杂的情况如何呢?
Collections.<T>reverseOrder()
例子吗?extends
,super
??
O.manyTypesMethod<?,MyHelpTypeNotInfered,?,?,?,?,?>()
)我有一个具有以下属性的对象.
private final String messageBundle;
private final List<String> messageParams;
private final String actionBundle;
private final Map<String, String> data;
private final Optional<Pair<Integer,TimeUnit>> ttl;
private final Optional<Integer> badgeNumber;
private final Optional<String> collapseKey;
Run Code Online (Sandbox Code Playgroud)
该对象位于库中,我宁愿不仅仅为了序列化目的而修改它,并且希望避免创建另一个DTO的成本.
如何序列化/反序列化可选属性?可选没有默认构造函数(apache commons Pair),但是我不能使用InstanceCreator,并且不太了解如何创建一个简单地将序列化委托给底层Optional元素的TypeAdapter.
我已经阅读了一些关于通过Iteratee将文件发送到S3的可能性,这似乎允许在我们收到文件时发送一个文件的S3块,并避免出现大文件的OutOfMemory例如.
我发现这个SO帖子可能几乎是我需要做的事情: 播放2.x:使用Iteratees上传活动文件 我真的不明白该怎么做,或者如果它真的可以在Play 2.0.2中使用(因为Sadek Brodi说foldM仅在Play 2.1中提供,例如
有人可以通过简单的方式解释这一点,对于那些阅读过有关Iteratees的博客,还不是Scala/Play2专家的人来说?
我甚至不知道我是否应该使用多部分体分析器或类似的东西,但我知道的一件事是我不明白这段代码在做什么:
val consumeAMB =
Traversable.takeUpTo[Array[Byte]](1028*1028) &>> Iteratee.consume()
val rechunkAdapter:Enumeratee[Array[Byte],Array[Byte]] =
Enumeratee.grouped(consumeAMB)
val writeToStore: Iteratee[Array[Byte],_] =
Iteratee.foldM[Array[Byte],_](connectionHandle){ (c,bytes) =>
// write bytes and return next handle, probable in a Future
}
BodyParser( rh => (rechunkAdapter &>> writeToStore).map(Right(_)))
Run Code Online (Sandbox Code Playgroud)
顺便说一句,与使用经典Java InputStream/OutputStream相比,内存消耗会有什么不同.我实际上能够以非阻塞方式将500mb文件转发到S3,内存消耗非常低,不使用Iteratees,使用Java + AsyncHttpClient + Grizzly(但我想它也适用于Netty).
那么使用Iteratee有什么好处?
我可以看到的一个区别是我获取并转发到S3的InputStream在我的情况下由临时文件支持(这是一个CXF行为),因此它可能不像Play Iteratee那样具有反应性
但是对于Iteratees,如果Enumerator产生连接接收到的字节并通过Iteratee将它们转发给S3,那么如果与S3的连接不好并且字节无法快速转发,则存储"待定"字节?
Github具有以下内容安全策略:
Content-Security-Policy:default-src*; script-src assets-cdn.github.com www.google-analytics.com collector-cdn.github.com; object-src assets-cdn.github.com; style-src'self''unsafe-inline''unsafe-eval'res assets-cdn.github.com; img-src'self'数据:assets-cdn.github.com identicons.github.com www.google-analytics.com collector.githubapp.com*.githubusercontent.com*.gravatar.com*.wp.com; media-src'un'; frame-src'self'render.githubusercontent.com www.youtube.com player.vimeo.com checkout.paypal.com; font-src assets-cdn.github.com; connect-src'self'ghconduit.com:25035 live.github.com uploads.github.com s3.amazonaws.com
我们可以使用Evernote或Pocket等服务的浏览器扩展来剪辑/检索网页内容.
在这个Github政策中,我没有看到Pocket或Evernote的任何引用.有人可以解释为什么Pocket扩展能够从Github检索内容,而Evernote扩展不是,有CSP错误)
CSP策略是否可以阻止加载bookmarklet应用程序或浏览器扩展应用程序(如剪辑器)?如果是这样,Pocket如何能够在任何内容上进行扩展工作?
我们的bookmarklets /扩展中有这个问题,我希望它们像Pocket扩展一样顺畅,但我真的不知道从哪里开始...谢谢
编辑:由于人们在评论中要求代码,我们的书签加载了这个javascript:
javascript: (function() {
function loadScript(a, b) {
var c = document.createElement('script');
c.type = 'text/javascript';
c.src = a;
var d = document.getElementsByTagName('head')[0],
done = false;
c.onload = c.onreadystatechange = function() {
if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) {
done …
Run Code Online (Sandbox Code Playgroud) security bookmarklet browser-extension google-chrome-extension content-security-policy
假设我想从2个远程服务聚合数据,并尽可能快地提供响应:
def loadUser: Future[User]
def loadData: Future[Data]
case class Payload(user: User, data: Data)
Run Code Online (Sandbox Code Playgroud)
我知道这个顺序执行异步任务:
for {
user <- loadUser
data <- loadData
} yield Payload(user,data)
Run Code Online (Sandbox Code Playgroud)
虽然这个并行执行它们,因为异步任务在顺序链接之前被触发:
val userF = loadUser
val dataF = loadData
for {
user <- userF
data <- dataF
} yield Payload(user,data)
Run Code Online (Sandbox Code Playgroud)
然而,差异对我来说有点过于含蓄,有些人可能最初没有注意到它.
申请人也解决了这个问题
(loadUser |@| loadData) { Payload(_,_) }
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我在应用程序和monad之间使用什么来执行并行异步计算吗?每种方法的优缺点是什么?
我正在努力让redux-saga与onmessage
听众合作.我不知道为什么我的工作不起作用.
我有以下设置.
// sagas.js
import { take, put } from 'redux-saga';
import {transactions} from "./actions";
function* foo (txs) {
console.log("yielding"); // appears in console
yield put(transactions(txs)); // action *is not* dispatched
console.log("yielded"); //appears in console
}
const onMessage = (event) => {
const txs = JSON.parse(event.data);
const iter = foo(txs);
iter.next(); // do I really need to do this?
};
function* getTransactions() {
while(yield take('APP_LOADED')) {
const stream = new EventSource(eventSourceUrl);
stream.onopen = onOpen;
stream.onmessage = onMessage;
stream.onerror …
Run Code Online (Sandbox Code Playgroud) java ×3
javascript ×3
scala ×3
reactjs ×2
amazon-s3 ×1
applicative ×1
backbone.js ×1
bookmarklet ×1
criteria ×1
deferred ×1
ecmascript-6 ×1
future ×1
generics ×1
gson ×1
hibernate ×1
iterate ×1
jpa ×1
jpa-2.0 ×1
json ×1
monads ×1
promise ×1
redux ×1
redux-saga ×1
scala-cats ×1
scalaz ×1
scjp ×1
security ×1