小编Jam*_*ies的帖子

尊重'valueLink'的自定义ReactJS组件

我正在构建一个自定义的ReactJS组件(一个'Select2'下拉列表包装器),并希望使用'valueLink'参数实现对标准双向绑定帮助程序的支持.

但是,似乎处理'valueLink'参数的mixin仅适用于标准组件,而不适用于自定义组件.

有没有办法让我的组件自动实现标准的valueLink行为,或者我是否需要自己显式解析和实现此支持(可能会引入基本库中不存在的错误或奇怪的行为)

data-binding reactjs

7
推荐指数
1
解决办法
2212
查看次数

Aeson和Lens与DeriveGeneric和makeLenses - 名称不对齐

假设我有一个类型 Person

import GHC.Generics
import Data.Text
import Data.Aeson
import Control.Lens

data Person = Person {
    _firstName :: Text,
    _lastName  :: Text,
    _age       :: Int
} deriving (Show, Generic)
Run Code Online (Sandbox Code Playgroud)

我想自动为它导出镜头和JSON类型类

makeLenses ''Person
instance FromJSON Person
instance ToJSON Person
Run Code Online (Sandbox Code Playgroud)

这可以正常工作,但是DeriveGeneric将我的字段名称视为具有下划线并且期望我的JSON相应地格式化.

{ "_firstName": "James" ... etc} -- The underscore doesn't belong here.
Run Code Online (Sandbox Code Playgroud)

显然我可以从data定义本身中删除下划线,但是后来makeLenses无法派生所需的getter和setter.

理想情况下,我希望能够做到的是这样的事情

let person = decode blob
let name = person ^. firstName
Run Code Online (Sandbox Code Playgroud)

即我希望能够导出镜头和JSON实例,所有字段名称都正确排列在我正在消耗的JSON-REST Api中的值,而无需编写太多样板文件.

这似乎是一件很直接的事情,我觉得我错过了一些明显的东西?

json haskell aeson haskell-lens

7
推荐指数
1
解决办法
631
查看次数

沙盒Java/Groovy/Freemarker代码 - 防止执行特定方法

我正在开发一个允许开发人员上传自定义groovy脚本和freemarker模板的系统.

我可以使用默认的Java安全基础架构在非常高的级别上提供一定级别的安全性 - 即阻止代码访问文件系统或网络,但是我需要限制对特定方法的访问.

我的计划是修改Groovy和Freemarker运行时以读取将某些方法列入白名单或将其列入黑名单的注释,但这会迫使我维护其代码的分叉版本,这是不可取的.

我基本上需要做的就是在从Groovy或Freemarker调用时阻止特定方法的执行.我已经考虑过一个可以查看调用堆栈的黑客,但这将是一个巨大的速度命中(并且它非常混乱).

有没有人有任何其他想法来实现这个?

java security groovy freemarker sandbox

6
推荐指数
1
解决办法
2058
查看次数

Scala中的符号"那"是什么意思

我已经看过几个使用Generics符号"That"的代码示例.即

def map[B, That](f : (A) => B) : That
Run Code Online (Sandbox Code Playgroud)

但是,由于缺乏谷歌这个词的能力,我找不到任何关于它做什么或如何使用它的文档.

它只是一个普通的类型占位符,还是它做了一些特别的事情?

generics scala

6
推荐指数
1
解决办法
232
查看次数

RequireJS - 在r.js优化包中导入模块

是否可以从优化的RequireJS/r.js包中导入单个模块?

我有一个javascript项目分为两个独立的组件 - 'MyLibrary'和'MyApplication'

MyLibrary包含两个独立的模块,'MyModule1'和'MyModule2'.

在开发模式中,我可以使用RequireJS导入每个模块,并使用MyApplication中的普通定义(['MyLibrary/MyModule1'],function(){})语法.

但是,一旦通过r.js运行MyLibrary,这似乎不再可能 - 似乎没有办法直接引用内部模块了?

我可以从编译/优化的源中看到每个模块都有define()块,但My Application中的RequireJS似乎不能直接引用它们.

这是可能的,还是我需要将整个应用程序捆绑到一个文件中才能使用.

编辑:我正在Play框架中完成RequireJS优化阶段,并且我对构建配置的控制很少.

({appDir: "javascripts",
[info]           baseUrl: ".",
[info]           dir:"javascripts-min", mainConfigFile: "javascripts/build.js", modules:         [{name: "main"}]})
Run Code Online (Sandbox Code Playgroud)

javascript requirejs

6
推荐指数
1
解决办法
262
查看次数

返回在UPDATE中实际更改的表的行

使用Postgres,我可以执行更新语句并返回受推荐影响的行.

UPDATE accounts
SET status = merge_accounts.status,
    field1 = merge_accounts.field1,
    field2 = merge_accounts.field2,
    etc.
FROM merge_accounts WHERE merge_accounts.uid =accounts.uid
RETURNING accounts.*
Run Code Online (Sandbox Code Playgroud)

这将为我提供与该WHERE子句匹配的所有记录的列表,但是不会告诉我操作实际更新了哪些行.

在这个简化的用例中,当然简单地添加另一个防护是微不足道的AND status != 'Closed,但是我的真实世界用例涉及从10,000个行的合并表中更新潜在的几十个字段,我希望能够检测哪些行实际上已经改变了,它们与之前的版本相同.(期望很少的行实际上会改变).

到目前为止我得到的最好的是

UPDATE accounts
SET x=..., y=...
FROM accounts as old WHERE old.uid = accounts.uid
FROM merge_accounts WHERE merge_accounts.uid = accounts.uid
RETURNING accounts, old
Run Code Online (Sandbox Code Playgroud)

这将返回一个新旧行的元组,然后可以在我的Java代码库本身内部进行区分 - 但这需要大量额外的网络流量并且可能容易出错.

理想的情况是能够让postgres返回实际有任何值更改的行 - 这可能吗?

在github上这是一个更真实的例子,我正在做的事情,结合到目前为止的一些建议.
使用Postgres 9.1,但如果需要可以使用9.4.要求是有效的

  • 能够执行新数据的upsert
  • 我们可能只知道要在任何给定行上更新的特定键/值对
  • 获取仅包含upsert实际更改的行的结果
  • 奖金 - 获取旧记录的副本.

由于这个问题已经打开,我现在已经完成了大部分工作,虽然我不确定我的方法是否是一个好主意 - 它有点被黑客攻击.

sql postgresql sql-update

6
推荐指数
1
解决办法
3072
查看次数

Angular 1.2不再允许在同一个元素上使用多个隔离的范围指令?

我在Angular项目中有一些代码,它们使用两个具有隔离范围的独立指令.它们不需要共享范围,只需存在于同一元素上.它们都以稍微不同的方式改变DOM,并且重要的是绑定到作为参数传递的值.

这在1.0中工作,但是Angular 1.2现在在尝试执行此操作时会生成错误

要求新/隔离范围的多个指令

基于项目git历史出现Angular 1.2更改行为,以保持同一元素上的两个隔离指令分开.这是一件好事,当在同一元素上放置两个"Attribute"指令时,它可以正常工作.

<div my:directive="myDirectiveData" my:other-directive="myOtherDirectiveData" />
Run Code Online (Sandbox Code Playgroud)

像你期望的那样工作.

然而

<my:directive my:directive-data="myDirectiveData" my:other-directive="myOtherDirectiveData" />
Run Code Online (Sandbox Code Playgroud)

引发上述错误.(多个指令要求新/隔离范围)

在这种情况下,我希望每个指令仍然与它们自己的非共享隔离范围并行存在.

这在Angular 1.2中仍然可行吗?

angularjs angularjs-directive angularjs-scope

5
推荐指数
2
解决办法
2033
查看次数

Scalaz Bind [Seq]类型类

我目前正在将一些代码从传统的Scala移植到Scalaz风格.

在我的大多数代码中,在我公开的API签名中使用Seq特征而不是直接使用具体类型(即List,Vector)是相当常见的.但是,这给Scalaz带来了一些问题,因为它没有提供Bind [Seq]类型类的实现.

即这将正常工作.

List(1,2,3,4) >>= bindOperation
Run Code Online (Sandbox Code Playgroud)

但这不会

Seq(1,2,3,4) >>= bindOperation
Run Code Online (Sandbox Code Playgroud)

失败了 could not find implicit value for parameter F0: scalaz.Bind[Seq]

我认为这是Scalaz中的故意设计决定 - 但我不确定如何在之前的预期/最佳实践.

我是否应该将代码直接写入List/Vector而不是使用更灵活的Seq接口?或者我应该简单地定义我自己的Bind [Seq]类型类?

monads scala typeclass scalaz

5
推荐指数
1
解决办法
346
查看次数

Type-safe generic case class updates in Scala

I'm attempting to write some code that tracks changes to a record and applies them at a later date. In a dynamic language I'd do this by simply keeping a log of List[(String, Any)] pairs, and then simply applying these as an update to the original record when I finally decide to commit the changes.

I need to be able to introspect over the updates, so a list of update functions isn't appropriate.

In Scala this is fairly trivial using …

generics scala shapeless

5
推荐指数
1
解决办法
511
查看次数

在两个ScalaJS SBT项目之间使用DependsOn

(很久以前的问题.简化tl;底部是博士).

我有两个使用SBT构建的ScalaJS项目 - "myapp"和"mylib",在以下目录结构中

root/build.sbt

root/myapp/build.sbt
root/myapp/jvm/
root/myapp/js/
root/myapp/shared/

root/mylib/build.sbt
root/mylib/jvm
root/mylib/js
root/mylib/shared
Run Code Online (Sandbox Code Playgroud)

lib导出名为"com.example:mylib:0.1"的工件,该工件用作库依赖项myapp.

myapp和mylib位于不同的存储库中,包含自己的构建文件,并且应该能够完全单独构建(即它们必须包含自己的构建配置).

在生产中,它们将单独构建,mylib首先作为maven工件发布,然后myapp单独构建.

然而,在开发中,我希望能够将它们合并到父SBT项目中,以便两者可以并行开发,而无需publishLocal在每次更改后使用.

在传统(不是scalajs)项目中,这将非常容易

$ROOT/build.sbt:

lazy val mylib = project
lazy val myapp = project.dependsOn(mylib)
Run Code Online (Sandbox Code Playgroud)

然而,在ScalaJS,我们实际上有两个项目每个模块里面- ,,appJVM 和.因此,上述配置仅查找聚合根项目,并且未将配置正确应用于实际的JVM和JS项目.appJSlibJVMlibJSdependsOn

(即myapp和mylib build.sbt每个包含两个项目,以及一个聚合根项目)

理想情况下,我希望能够做类似以下的事情

lazy val mylibJVM = project
lazy val myappJVM = project.dependsOn(mylibJVM)

lazy val mylibJS = project
lazy val myappJS = project.dependsOn(myappJS)
Run Code Online (Sandbox Code Playgroud)

不幸的是,这只是在根目录中创建新项目而不是自己导入子项目.

我也尝试了各种路径组合(例如)

lazy val mylibJVM = project.in(file("mylib/jvm"))
Run Code Online (Sandbox Code Playgroud)

但是这没有看到build.sbt文件中的配置 mylib

最终我继续遇到同样的问题 - …

scala sbt scala.js

5
推荐指数
1
解决办法
262
查看次数

Haskell中的"战略模式"

在OO世界中,我有一个类(我们称之为"Suggestor"),它实现接近"策略模式"的东西,以在运行时提供不同的算法实现.作为学习Haskell的练习,我想重写一下.

实际的用例非常复杂,所以我将简单介绍一个简单的例子.

假设我有一个Suggester列出规则列表的类,并将每个规则作为过滤器应用于数据库结果列表.

每个规则都有三个阶段"构建查询","后查询过滤器"和"记分器".我们最终会得到满足以下要求的界面

buildQuery :: Query -> Query
postQueryFilter :: [Record] -> [Record]
scorer :: [Record] -> [(Record, Int)]
Run Code Online (Sandbox Code Playgroud)

Suggestor需要获取与此接口匹配的规则列表 - 在运行时动态 - 然后按顺序执行它们.必须首先在所有规则中运行buildQuery(),然后是postQueryFilter,然后是scorer.(即我不能只将一个规则的函数组合成一个函数).

在斯卡拉我只是做

// No state, so a singleton `object` instead of a class is ok
object Rule1 extends Rule {
  def buildQuery ...
  def postQueryFilter ...
  def scorer ...
}

object Rule2 extends Rule { .... }
Run Code Online (Sandbox Code Playgroud)

然后可以通过传递相关规则来初始化服务(在运行时根据用户输入定义).

val suggester = new Suggester( List(Rule1, Rule2, Rule3) );
Run Code Online (Sandbox Code Playgroud)

如果规则是单个函数,那么这很简单 - 只需传递一个函数列表.但是,由于每个规则实际上是三个函数,我需要以某种方式将它们组合在一起,所以我有多个实现会议接口.

我的第一个想法是类型类,但是这些似乎不能满足我的需求 - 他们期望一个类型变量,并强制我的每个方法必须使用它 - …

haskell interface strategy-pattern

4
推荐指数
2
解决办法
725
查看次数

Scala存在 - 类型不匹配,无法推断T =:= T.

在Scala中使用存在类型时,编译器似乎将存在主体的每个用法推断为不同的类型参数,即使它们实际上是相同的.

对于一个简单的人为例子 - 给出以下代码

class Box[T](value:T){
  def get:T = value
  def contains(check:T):Boolean = value == check
}
Run Code Online (Sandbox Code Playgroud)

我可以做以下事情

val b1 = new Box(1)
b1.contains(b1.get)
Run Code Online (Sandbox Code Playgroud)

但是当使用存在类型时......

 val b2 : Box[_] = new Box(1)
 b2.contains(b2.get)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误(在scala 2.11.7中

[error] /private/tmp/exttest/test.scala:53: type mismatch;
[error]  found   : (some other)_$6(in value b2)
[error]  required: _$6(in value b2)
[error]   b2.contains(b2.get)
Run Code Online (Sandbox Code Playgroud)

我的假设是编译器会理解_$6在两种情况下都使用相同的类型参数,但是它似乎失去了跟踪并将它们视为单独的类型.

我是否从根本上误解了存在类型的某些内容,或者这是Scala编译器中的错误 - 如果是这样,是否有最佳实践来解决它?

generics scala type-inference existential-type

4
推荐指数
1
解决办法
132
查看次数

现代浏览器是否还需要基于浮动的布局?

曾经有一段时间IE6缺乏对CSS功能的支持,例如"display:table-cell"和inline-block,导致"float"被劫持并用于布局 - 这是从未设计过的(或者特别擅长).

使用浮动似乎导致过于脆弱的布局难以维护,并且通常会随着动态内容的变化而完全破坏.

这是当时的一个必要的恶魔,但是现在对IE8之前的浏览器的支持不太重要了,理论上我们应该能够摆脱浮动并使用实际适用于布局的CSS部分 - 例如上述显示:table-cell和inline-block.

我目前正在考虑建议我的团队完全摆脱基于浮动的设计 - 我是否有把自己画到一个角落并遇到问题的风险,或者如果旧的浏览器支持对我们的项目不重要,这是一个更好的选择?

css layout html5 css-float

0
推荐指数
1
解决办法
1003
查看次数