我在Backbone.js中遇到了模型验证的奇怪行为.
首次创建模型时,如
var foo = new Foo({
bar: 42
});
Run Code Online (Sandbox Code Playgroud)
Backbone调用foo.set()传递作为给定地图的参数{bar: 42},正如从源可以看到的那样.在这样做时,它也会传递选项{silent: true},就像在行中一样
this.set(attributes, {silent : true});
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为silent === true避免触发change事件,这在这种情况下没有意义.
但是出于某种原因,我无法理解,silent === true也会阻止验证 ; 看到线上的来源
if (!options.silent && this.validate && !this._performValidation(attrs, options)) return false;
Run Code Online (Sandbox Code Playgroud)
所以看起来模型在创建时从未经过验证,但它们通常是在某些属性发生变化时.此外,验证的存在与发送change事件的动作密不可分,这是完全正交的.
任何人都可以解释为什么会这样吗?什么是解决这个问题的清洁和面向未来的方法?
我可以手动调用_performValidation,但这有两个缺点:
_performValidation不是API的一部分,也许它将在未来的版本中发生变化.我在项目中使用Django 远程用户身份验证.我实际使用的是django.contrib.auth.RemoteUserBackend没有中间件,并authenticate在用后端检查用户是否合法后手动调用.
阅读中间件的来源,它似乎只是从请求中的标头获取用户名,然后根据传递此用户名的后端对用户进行身份验证.反过来,远程用户后端只是使用传递的任何用户名快速登录用户.然后,用户可以访问需要有效登录的每个区域.
这不仅仅是一个巨大的安全漏洞吗?这意味着如何使用?
在我的情况下,我应该是安全的,因为唯一的呼叫authenticate来自成功的远程身份验证后,但我想知道中间件被引入的原因.
我需要在网站中嵌入一个issuu文档.应允许网站管理员决定在前端显示哪个文档.
使用issuu页面上的嵌入链接这是一项简单的任务.但我需要自定义一些选项 - 例如,禁用共享,设置尺寸等.每次需要更改文档时,我都不能依赖管理员执行此过程.
我可以根据自己的口味轻松自定义issuu嵌入代码,我需要的只是文档ID.不幸的是,id不包含在文档的issuu页面中.例如,这个随机链接的id 恰好110209071155-d0ed1d10ac0b40dda80dad24166a76ee是,无论是在URL中还是在页面内都无法找到.你必须深入研究嵌入代码才能找到它.
我认为issuu API可以允许我获取文档ID给定其URL,但我找不到这样的东西.最接近的匹配是搜索API,但如果我搜索文档的确切名称,我只获得一个不同文档的匹配!
是否有一些简单的方法可以只知道其URL来嵌入文档?或者非技术人员在页面中找到文档ID的简单方法?
我不理解Groovy中以下构造的目的.
每当你有一个东西的集合,调用它items,你可以只通过访问集合上的属性,即,,
items.prop == items.collect { it.prop }
Run Code Online (Sandbox Code Playgroud)
这对我来说很奇怪,因为我认为第一个符号实际上意味着我想要访问集合对象本身的属性.例如,可能会发生真实的歧义案例
[[1,2,3],['cat', 'elephant']].size == 2
Run Code Online (Sandbox Code Playgroud)
但根据之前的表示法,它应该是平等的[3, 2].
此外,如果收集符号不够短,则存在*.扩散点运算符,其意图以这种方式使用:
[[1,2,3],['cat', 'elephant']]*.size = [3, 2]
Run Code Online (Sandbox Code Playgroud)
模糊点符号的目的是什么?它是否只是为了节省字符而添加,
*.或者它具有合法的使用情况,哪些*.不起作用并且collect会很麻烦?
我正在尝试开始使用Lift框架,阅读Lift in Action.我想跟随这些示例,但我立即遇到了安装Lift的问题.我知道有很多方法可以轻松地开始使用Lift,但是我想使用Lifty,就像本书一样,能够遵循它.
问题在于,sbt自从该书出版以来,Lifty和(以及Lift也是如此!)都向前发展.我sbt从Ubuntu的Typesafe存储库安装.现在我被困在尝试安装Lifty.
继Lifty文档和对SO这个答案 -由于这一事实Lifty还没有发布二进制文件sbt0.11.3 -我想我应该把在下面~/.sbt/plugins/build.sbt:
resolvers += Resolver.url("sbt-plugin-releases", new URL("http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases/"))(Resolver.ivyStylePatterns)
addSbtPlugin("org.lifty" % "lifty" % "1.7.4")
libraryDependencies +=
Defaults.sbtPluginExtra(
"org.lifty" % "lifty" % "1.7.4",
"0.11.2",
"2.9.1"
)
Run Code Online (Sandbox Code Playgroud)
后者是告诉sbt使用Lifty插件sbt 0.11.2.
现在sbt似乎能够下载Lifty并正确启动,但我没有lifty命令.所以,当我这样做
lifty learn lift https://raw.github.com/Lifty/lifty/master/lifty-recipe/lifty.json
Run Code Online (Sandbox Code Playgroud)
sbt 抱怨:
[error] Not a valid key: lifty (similar: history)
[error] lifty learn lift https://raw.github.com/Lifty/lifty/master/lifty-recipe/lifty.json
[error] ^
Run Code Online (Sandbox Code Playgroud)
我该如何安装Lifty?请注意,我是Scala,sbt和Lift的新手.
编辑
我设法通过降级到sbt0.7.7 来安装Lifty.但是如果我这样做的话
> lift create project-blank
> …Run Code Online (Sandbox Code Playgroud) 我需要创建一个Nutch插件,使用Akka与一些外部应用程序通信.为了做到这一点,我需要将插件打包为胖罐 - 我正在使用sbt-assembly版本0.8.3.
当我尝试运行插件时,我得到了异常
com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'akka'
Run Code Online (Sandbox Code Playgroud)
好像Akka无法找到reference.conf.这很奇怪,因为sbt-assembly 应该能够正确打包该文件,事实上我可以在创建的jar中看到它的内容.
我build.sbt看起来像这样:
import AssemblyKeys._
name := "my-project"
version := "0.1-SNAPSHOT"
scalaVersion := "2.10.0"
resolvers ++= Seq(
"Central Repo" at "http://repo1.maven.org/maven2",
"Typesafe Repository" at "http://repo.typesafe.com/typesafe/releases/",
"Akka io" at "http://akka.io/repository"
)
libraryDependencies ++= Seq(
...,
"com.typesafe.akka" %% "akka-actor" % "2.1.1",
"com.typesafe.akka" %% "akka-remote" % "2.1.1"
)
seq(assemblySettings: _*)
mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>
{
case "plugin.xml" …Run Code Online (Sandbox Code Playgroud) 我试图在Rust中读取Json文件的内容.此文件包含平面中的点数组,如[[1, 2], [3.5, 2.7], [0, -2.1]].
我第一次尝试实现的是
extern crate serialize;
use serialize::json;
use std::io::File;
fn read_points() -> Vec<[f64, ..2]> {
let contents = File::open(&Path::new("../points.json")).read_to_string().unwrap();
let points: Vec<Vec<f64>> = json::decode(contents.as_slice()).unwrap();
points.iter().map(|&v| [v[0], v[1]]).collect::<Vec<[f64, ..2]>>()
}
Run Code Online (Sandbox Code Playgroud)
现在我有两个问题.
首先,我得到一个编译错误
error: cannot move out of dereference of `&`-pointer
Run Code Online (Sandbox Code Playgroud)
这似乎意味着我的地图操作不安全.作为Rust的一个完整的新手,对于我来说,&v存在于内存中并不明显.理想情况下,我想访问底层数组Vec<f64>,甚至更好,避免将内部向量分配直接读取到json Vec<[f64, ..2]>.
第二 - 但不那么重要 - 有两个丑陋的unwrap电话.现在,我明白读取文件和解析json都可能会失败.有没有办法轻松组合Result实例,例如flatmap在Scala或bindHaskell中?甚至更好,像记号?
我是make的新手,我正在尝试使用它来部署一些javascript文件.我一直在努力解决以下问题,但没有成功.
我的目录结构如下:
helpers/
foo/
foo.js
test/
test1.js
test2.js
...
bar/
bar.js
test/
test1.js
test2.js
...
other helpers...
distrib/
files ready for distribution
other stuff...
Run Code Online (Sandbox Code Playgroud)
我的makefile应该构建帮助器等.对于每个帮助foo我想生产,下DISTRIB,以下文件:foo-version.js,foo-version-uncommented.js,foo-version-packed.js和foo-version-tests.zip.前三个是由foo.js获得的,分别作为副本,通过剥离注释和运行javascript minifier.我已经有命令来执行这些任务.
应该在文件本身的注释中读取版本号,我可以轻松地使用它
def version
$(shell cat $1 | grep @version | sed -e"s/.*version *//")
endef
Run Code Online (Sandbox Code Playgroud)
我的问题是像目标一样foo-version.js是动态的,因为它们取决于运行make时读取的版本号.我试图使用模式,但我没有做到这一点.问题是像这样的东西是行不通的
helpers := foo bar
helpers: $(helpers)
$(helpers): %: $(call version, %)
Run Code Online (Sandbox Code Playgroud)
因为第二个%在宏调用中没有扩展,但它是按字面意思使用的.
我需要能够make helpers构建所有帮助程序或make foo构建单个帮助程序.第二步是删除distrib版本号较低的所有文件.任何想法如何做到这一点?
作为一个附带问题:使用不同的构建工具,这样的任务会更容易吗?我不是专家,可能值得学习别的东西.
我正在努力学习C.因为我已经熟悉高级语言(PHP,Javascript,Python),我觉得我要做的大部分工作都涉及学习如何替换我认为理所当然的结构(比如变量)通过使用指针和手动管理内存来调整大小的数组.我的问题是我有点担心玩指针.
通常我会尝试使用其他语言功能,但我的问题是指针使用不当可能会产生意外结果.特别是:是否有可能 - 如果我犯了一个错误 - 我可能会破坏其他程序正在使用的内存段,导致这些程序行为不端?或者操作系统(在我的情况下是各种风格的Ubuntu)会阻止我对分配给不同进程的内存进行干预吗?
在前一种情况下,我想有可能(尽管不太可能)我可能会导致其他程序在磁盘上写入错误数据,从而破坏我在硬盘上的一些信息.甚至最差(甚至更不可能,我猜)它可能会损坏某些硬件 - 例如旧的显示器可能被软件烧毁,这会设置超出范围的刷新率.
我知道可能我的担心是不合理的,但是我想知道编译器/操作系统在我管理指针时犯了错误,会阻止我做多少危险的操作.
我已阅读Django书,但旧版本1.1.
除了重新阅读本书以获取更新版本之外,了解新功能和已弃用功能的最快方法是什么?我知道我可以查看更改日志,但我正在寻找更详细的资源,也许是一些博客文章.
django ×2
python ×2
sbt ×2
scala ×2
akka ×1
api ×1
backbone.js ×1
c ×1
frontend ×1
groovy ×1
issuu ×1
javascript ×1
json ×1
lift ×1
lifty ×1
makefile ×1
model ×1
nutch ×1
pointers ×1
rust ×1
sbt-assembly ×1
security ×1
syntax ×1
validation ×1
web-services ×1