小编ima*_*gio的帖子

使用angular2将HTML从服务器插入DOM(Angular2中的常规DOM操作)

我想将从服务器检索到的一些HTML插入到angular2中的DOM元素中.我似乎无法找出最佳/正确的方法来做到这一点.

我不能只将{{my_data}}放入模板中,因为angular 2会自动转义HTML.

我试图编写一个html-unsafe指令,它只是直接为元素的innerHTML赋值:

/// <reference path="../../typings/typings.d.ts" />

import {Directive} from 'angular2/angular2';
import {ElementRef} from 'angular2/core';


@Directive({
    selector: "[html-unsafe]",
    properties: ['htmlUnsafe']
})
export class HtmlUnsafe{
    constructor(private elem: ElementRef){

    }

    set htmlUnsafe(value){
        setTimeout(() => {
            this.elem.nativeElement.innerHTML = value;
        },0);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以现在在我的模板中我有类似的东西

<td [html-unsafe]="my_data"></td>
Run Code Online (Sandbox Code Playgroud)

这是有效的,但我不确定这是否正确,并且setTimeout似乎是一个奇怪的解决方法.如果没有setTimeout,它看起来this.elem.nativeElement实际上并不是指DOM元素,而是指某种临时元素.

是否有更"正确"的angular2方式简单地将HTML插入DOM?为什么我需要在setTimeout中包装DOM操作?

javascript dom typescript angular

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

播放Map [Int,_]的JSON格式化程序

我正在尝试使用play-reactivemongo和reactivemongo-extensions将Rails/Mongodb应用程序迁移到Play 2.3.在建模我的数据时,我遇到了一个问题,即序列化和反序列化Map [Int,Boolean].

当我尝试通过宏来定义我的格式时

implicit val myCaseClass = Json.format[MyCaseClass]
Run Code Online (Sandbox Code Playgroud)

其中MyCaseClass有一些字符串字段,一个BSONObjectID字段,以及编译器抱怨的Map [Int,Boolean]字段:

No Json serializer found for type Map[Int,Boolean]. Try to implement an implicit Writes or Format for this type.
No Json deserializer found for type Map[Int,Boolean]. Try to implement an implicit Reads or Format for this type.
Run Code Online (Sandbox Code Playgroud)

查看Play in Reads.scala中的源代码,我看到为Map [String,_]定义了一个Read,但没有为Map [Int,_]定义.

Play是否有字符串映射的默认读/写,而其他简单类型没有?

我不完全理解play定义的Map [String,_],因为我对scala相当新.我如何将其转换为Map [Int,_]?如果由于某些技术原因这是不可能的,我如何定义Map [Int,Boolean]的读/写?

json scala playframework playframework-2.3

9
推荐指数
2
解决办法
8150
查看次数

使用Json.obj和getOrElse播放2.3写作选项

从激活器控制台,这工作:

scala> import play.api.libs.json._
import play.api.libs.json._

scala> val testVal = Some("foo")
testVal: Some[String] = Some(foo)

scala> Json.obj("myJson" -> testVal)
res0: play.api.libs.json.JsObject = {"myJson":"foo"}
Run Code Online (Sandbox Code Playgroud)

这也有效:

scala> Json.obj("myJson" -> testVal.get)
res3: play.api.libs.json.JsObject = {"myJson":"foo"}
Run Code Online (Sandbox Code Playgroud)

这失败了:

scala> Json.obj("myJson" -> testVal.getOrElse(""))
 <console>:12: error: type mismatch;
  found   : Object
  required: play.api.libs.json.Json.JsValueWrapper
          Json.obj("myJson" -> testVal.getOrElse(""))
Run Code Online (Sandbox Code Playgroud)

但这有效:

scala> val testVal2 = testVal.getOrElse("")
testVal2: String = foo

scala> Json.obj("myJson" -> testVal2)
res2: play.api.libs.json.JsObject = {"myJson":"foo"}
Run Code Online (Sandbox Code Playgroud)

为什么编译器拒绝我的第三个例子?testVal.getOrElse("")求值为String,为什么编译器认为它Object在上面的第三个例子中呢?

json scala playframework playframework-2.3

8
推荐指数
2
解决办法
2263
查看次数

打字稿使用受该值类型约束的键访问泛型类型的值

我有一个打字稿函数,它采用通用类型和该通用类型的键。我限制该键,以便该函数仅接受其值属于某种类型的键。当使用约束键访问通用对象时,我没有得到预期的类型作为回报。

如何将通用对象的键限制为特定值类型并在通用函数中访问该值?

例如:

function onlyTakesADateKey<T, K extends keyof T>(item: T, key: T[K] extends Date ? K : never): void {
    //I've constrained `key` to ensure that item[key] is a Date but this doesn't get typed as a Date
    const shouldBeADateButIsNot = item[key]
    //Property 'getTime' does not exist on type 'T[T[K] extends Date ? K : never]'.ts(2339)
    shouldBeADateButIsNot.getTime()
}
const foo = { key1: "asdf", key2: new Date() }
//Argument of type 'string' is not assignable to parameter of type 'never'.ts(2345) …
Run Code Online (Sandbox Code Playgroud)

typescript typescript-generics

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

.bebextensions与Docker在elasticbeanstalk上

我试图在弹性beanstalk Docker实例上配置nginx以允许使用websockets.使用此处找到的信息,我将.ebextensions/01_files.config添加到我正在部署的zip中.

该zip包含.ebextensions/01_files.config,Dockerfile和我的应用程序的tgz.

01_files.config的内容如下:

files:
    "/etc/nginx/conf.d/websocketupgrade.conf" :
        mode: "000755"
        owner: root
        group: root
        content: |
            proxy_set_header        Upgrade         $http_upgrade;
            proxy_set_header        Connection      "upgrade";
Run Code Online (Sandbox Code Playgroud)

弹性豆茎似乎忽略了我的.ebextensions.永远不会写文件/etc/nginx/conf.d/websocketupgrade.conf.

在弹性beanstalk上使用.ebextensions与Docker容器的正确方法是什么?

nginx amazon-web-services websocket docker amazon-elastic-beanstalk

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

使用带有Play JSON的多个Write来呈现对象的不同视图

我正在编写一个Play 2.3应用程序,它提供由mongodb支持的JSON.来自数据库的一些文档包含敏感字段.我希望能够使用这些文档服务器端,但向客户端发送有限的JSON视图.关于读取/写入组合器的文档讨论了定义隐式读取和写入,它可以很好地用于向数据库发送数据和从数据库发送数据,但不能完全满足我的需求.

我想要做的是定义任何数量的其他写入,我可以使用像json"views"将特定的转换或模型子集发送到客户端.在Rails中,我使用JBuilder来实现此目的.

尝试显式传递不同的Writes toJson不会给我预期的行为.采取这个简单的控制器动作,应该编写所有用户ID和用户名的JSON数组:

def listUsers = Action.async {
    val testCustomWrite: Writes[User] = (
      (__ \ "id").write[String] and
      (__ \ "username").write[String]) { user: User =>
        (user._id.toString(), user.username)
      }

    UserDao.findAll().map {
      case Nil => Ok(Json.toJson(""))
      case users => Ok(Json.toJson(users)(testCustomWrite))
    }
  }
Run Code Online (Sandbox Code Playgroud)

这无法编译

type mismatch;
[error]  found   : play.api.libs.json.Writes[models.User]
[error]  required: play.api.libs.json.Writes[List[models.User]]
[error]       case users => Ok(Json.toJson(users)(testCustomWrite))
Run Code Online (Sandbox Code Playgroud)

该方式toJson处理写对象的列表依赖于隐式数组作家依赖于一个隐含的类型作家.我可以重写上面的内容,val testCustomWrite: Writes[List[User]]但这不是正确的解决方案,因为Play已经为隐式写入提供了一个数组包装器.

是否有一种在Play2中呈现多个JSON"视图"的首选方法?

json scala playframework playframework-2.3

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