小编mpa*_*tan的帖子

TypeAhead.js和Bloodhound显示奇数个结果

我的前端有一个TypeAhead/Bloodhound实现,它从Play/Scala服务器获取JSON数据.Typeahead-version是0.11.1.实施如下:

HTML:

<div id="typeahead" class="col-md-8">
   <input class="typeahead form-control"  type="text" placeholder="Select the user">
</div>
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

var engine = new Bloodhound({
  datumTokenizer: function (datum) {
    var fullName = fullName(datum);
    return Bloodhound.tokenizers.whitespace(fullName);
  },
  queryTokenizer: Bloodhound.tokenizers.whitespace,
  identify: function(obj) { return obj.id; },
  remote: {
    url: routes.controllers.Users.index("").url,
    cache: false,
    replace: function (url, query) {
        if (!isEmpty(query)) {
            url += encodeURIComponent(query);
        }
        return url;
    },
    filter: function (data) {
        console.log(data);
        return $.map(data, function (user) {
            return {
                id: user.id,
                fullName: viewModel.fullName(user)
            };
        });
    }
}
}); …
Run Code Online (Sandbox Code Playgroud)

javascript jquery json typeahead.js bloodhound

11
推荐指数
2
解决办法
4944
查看次数

Android - 如何实现始终部分可见的NavigationDrawer?

我想在我的Android项目中有一个NavigationDrawer,它始终部分显示ListView,并且项目也是可点击的,但是当用户拖动抽屉时,会显示完整的ListView.

下面的图像是我想要实现的:

在此输入图像描述

第一个是"普通视图",您可以在其中看到小图标.第二个是当用户滑动导航抽屉以使其打开时.第三个是当回到普通视图中时,用户单击A和C,以便图标改变其颜色.

有什么建议怎么做?

谢谢回答 :)

android android-listview baseadapter navigation-drawer drawerlayout

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

在Play 2.4.3的范围内具有自定义QueryStringBindable

我想在我的Play-scala项目中使用java.sql.Date和Option [java.sql.Date]作为查询参数,但Play框架没有默认设置。我正在使用的播放版本是2.4.3。我有以下(粗略的)课程。

object CustomBinders extends {
  val dateFormat = ISODateTimeFormat.date()

  implicit def dateBinder: QueryStringBindable[Date] = new QueryStringBindable[Date] {
    def bind(key: String, params: Map[String, Seq[String]]): Option[Either[String, Date]] = {
      val dateString: Option[Seq[String]] = params.get(key)
      try {
        Some(Right(new Date(dateFormat.parseDateTime(dateString.get.head).getMillis)))
      } catch {
        case e: IllegalArgumentException => Option(Left(dateString.get.head))
      }
    }

    def unbind(key: String, value: Date): String = {
      dateFormat.print(value.getTime)
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后在Build.scala中,我有

import play.sbt.routes.RoutesKeys

object Build extends Build {
  RoutesKeys.routesImport += "binders.CustomBinders.dateBinder"
  RoutesKeys.routesImport += "binders.CustomBinders.optionDateBinder"
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用Option [Date]定义查询参数,则会出现错误

No QueryString binder found for …
Run Code Online (Sandbox Code Playgroud)

scala query-string querystringparameter playframework playframework-2.4

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

Rails 4"where" - 查询"has_many belongs_to" - 关系,搜索特定计数

这应该是一个简单的查询,但我遇到了正确的Rails语法问题.我正在使用Rails 4.1.1和Postgresql(9.3).我有一个模型用户和模型公司.用户有一家公司,公司有很多用户.我正在努力寻找拥有超过5个用户的所有公司.

class Company < ActiveRecord::Base
   has_many :users, dependent: :destroy
   ...

class User < ActiveRecord::Base
   belongs_to :company
   ...
Run Code Online (Sandbox Code Playgroud)

问题与此类似:查找计数大于零的所有记录

如果我尝试上面提到的类似解决方案:

Company.joins(:users).group("company.id").having("count(users.id)>5")
Run Code Online (Sandbox Code Playgroud)

它给了我一个错误:

PG::UndefinedTable: ERROR:  missing FROM-clause entry for table "company"
LINE 1: ... "users"."company_id" = "companies"."id" GROUP BY company.id...
Run Code Online (Sandbox Code Playgroud)

我已经尝试了几个不同的查询来获得结果,但我没有这样做.我可以使用SQL,但它似乎很愚蠢,因为这应该可以使用ActiveRecord轻松实现.

感谢所有的答复 :)

ruby sql postgresql activerecord ruby-on-rails

3
推荐指数
1
解决办法
1845
查看次数

Mongorestore 似乎内存不足并杀死了 mongo 进程

在当前设置中,有两个 Mongo Docker 容器,在主机 A 和 B 上运行,Mongo 版本为 3.4,并在副本集中运行。我想将它们升级到 3.6 并增加一个成员,以便容器可以在主机 A、B 和 C 上运行。容器有 8GB 内存限制并且没有分配交换(当前),并且在Rancher 中进行管理。所以我的计划是启动三个新容器,为它们初始化一个副本集,从 3.4 容器中进行转储,然后将其恢复为新的副本集 master。

转储很顺利,它的大小约为 16GB。当我尝试将其恢复到新的 3.6 master 时,恢复开始正常,但是在恢复了大约 5GB 的数据后,mongo 进程似乎被 OS/Rancher 杀死,而容器本身没有重新启动,MongoDB 进程只是崩溃并重新加载自己。如果我再次运行 mongorestore 到同一个数据库,它会说所有已经插入的条目的唯一键错误,然后从它停止的地方继续,只在 5GB 左右后再次执行相同的操作。所以看起来 mongorestore 将它恢复的所有条目加载到内存中。

所以我必须为此找到一些解决方案,并且:

  1. 每次崩溃时,只需运行 mongorestore 命令,以便它从停止的地方继续。它可能应该有效,但我觉得这样做有点不安。
  2. 一次恢复数据库一个集合,但最大的集合大于5GB,因此它也无法正常工作。
  3. 将交换或物理内存(临时)添加到容器中,以便在进程用完物理内存后该进程不会被终止。
  4. 别的东西,希望有更好的解决方案?

mongodb mongorestore docker rancher mongodb-3.6

3
推荐指数
1
解决办法
5898
查看次数

React 和 HTML Select 组件返回 String 而不是 Integer 的最佳方式

我有一个 React 类(JSX),其中包含以下(这里稍微简化了)代码:

var Select = React.createClass({
  onChange: function (ev) {
     console.log(ev.target.value);
  },
  render: function() {
     var optionsHtml = this.state.options.map(function (el) {
                    console.log(this.props.getValue(el);
                    return (
                        <option key={this.props.getValue(el)}
                                value={this.props.getValue(el)}> { this.props.getLabel(el) } 
                        </option>
                    )
                });
    return <select onChange={this.onChange}>
     {optionsHtml}
    </html>
}
Run Code Online (Sandbox Code Playgroud)

在渲染函数中,console.log 在初始化 Options-HTML 并设置值时返回整数值(即 1, 2, 3),但是在 onChange-method 中的值是一个字符串(即 "1", "2 ", "3") 当实际的选择框值改变时。

解决此问题的一种方法是在 onChange 中使用该值之前检查并将其转换为 Number,但还有其他方法可以做到吗?

编辑:

选项数组可能看起来像这样

var options = [
  { id: 1, name: "Test" },
  { id: 2, name: "Test2" },
  { id: 3, name: …
Run Code Online (Sandbox Code Playgroud)

javascript jsx reactjs react-jsx

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

使用 TripleDES 加密时将初始化向量 (IV) 附加到加密字节

我想向客户端提供加密令牌,并且我使用 javax.crypto.Cipher 进行加密。根据我的阅读,不建议将 ECB 作为加密模式,因此我使用带有初始化向量的 CBC 和 TripleDES 作为密码方法。据我了解,有几点是正确的。

  1. 更重要的是,IV 是随机的,并且每次加密都会初始化一个新的,而不是保密。
  2. 必须使用相同的 IV 来加密和解密令牌。
  3. 没有存储 IV 值的标准方法,每个实现在这方面可能有所不同。

因此,对于这些情况,我通过存储附加到加密字节数组的 IV 来实现我的实现,并且在解密阶段,IV 从字节数组中切出并用于解密。以下是 Scala 代码,但在 Java 中不会有太大差异。

val algorithmName = "TripleDES"
def encrypt(bytes: Array[Byte], secret: String): Array[Byte] = {
  val secretKey = new SecretKeySpec(secret.getBytes("UTF-8"), algorithmName)
  val encipher = Cipher.getInstance(algorithmName + "/CBC/PKCS5Padding")
  val iv = encipher.getParameters.getParameterSpec(classOf[IvParameterSpec])
  encipher.init(Cipher.ENCRYPT_MODE, secretKey, iv)
  encipher.doFinal(bytes) ++ iv.getIV
}

def decrypt(bytes: Array[Byte], secret: String): Array[Byte] = {
  val secretKey = new SecretKeySpec(secret.getBytes("UTF-8"), algorithmName)
  val encipher = Cipher.getInstance(algorithmName + "/CBC/PKCS5Padding") …
Run Code Online (Sandbox Code Playgroud)

java security encryption scala initialization-vector

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