小编Dav*_*les的帖子

Backbone和Handlebars的服务器端国际化

我正在开发一个Grails/Backbone/Handlebars应用程序,它是一个更大的遗留Java系统的前端,其中(出于历史和可定制性的原因)国际化消息深藏在隐藏在几个SOAP服务背后的数据库中隐藏在各种内部Java库之后.从Grails图层获取这些消息很简单,工作正常.

但我想知道的是如何将(例如)国际化标签放入我的Handlebars模板中.

现在,我正在使用GSP片段生成模板,包括一个获取我感兴趣的消息的自定义标记,例如:

<li><myTags:message msgKey="title"/> {{title}}</li>
Run Code Online (Sandbox Code Playgroud)

但是,出于性能和代码布局的原因,我希望摆脱GSP模板并将它们变成直接的HTML.我看了一下客户端国际化选项,比如i18n.js,但它们似乎依赖于我没有得到的消息文件的存在.(我可能会产生它,但它会是巨大且昂贵的.)

到目前为止,我能想到的最好的事情就是将标签楔入Backbone模型,所以我最终会得到像

<li>{{titleLabel}} {{title}}</li>
Run Code Online (Sandbox Code Playgroud)

然而,这真的远离了在一个漂亮干净的RESTful JSON API之上构建Backbone模型的理想 - RESTful服务返回的JSON混乱了表示数据(即本地化标签),或者我必须做额外的工作将标签注入Backbone模型 - 并且使用演示数据混乱Backbone模型似乎也是错误的.

我认为,就干净数据和干净的API而言,我想要做的是编写另一个RESTful服务,它接受消息键列表和类似消息,并返回包含所有本地化消息的JSON数据结构.但问题仍然存在:

  1. 指示(可能在模板中)给定视图需要哪些消息键的最佳方法是什么?
  2. 什么是正确的数据格式?
  3. 如何将本地化消息导入Backbone视图?
  4. 是否有任何现有的Javascript库可以提供帮助,或者我应该开始制作东西?
  5. 是否有更好/更标准的替代方法?

grails internationalization backbone.js handlebars.js

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

将String.split()结果转换为Scala列表

将以下java String []转换为Scala列表的方法是什么?

val trimmedList : List[String] = str.split("\\n")).map (_.trim)    // Missing some code here, does not compile
Run Code Online (Sandbox Code Playgroud)

collections scala

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

Swift运算符的优先级是什么?

我想查找一些运算符的优先级.是否有某个列表?我还没找到一个.

swift

7
推荐指数
2
解决办法
2499
查看次数

仅迭代公共Ruby常量

由于Ruby 2.0左右,可以使用常量私有private_constant,如果常量直接在声明模块之外使用,则会导致错误.

然而,constantsconst_defined?仍返回私人常数,并const_get允许对它们的访问.有没有办法以编程方式识别私有常量并在运行时过滤掉它们?

(注意:Module.private_constant有什么作用?有没有办法只列出私有常量?它的答案并没有专门解决这种情况,而是相反(如何只列出私有常量).)


更新:看起来好像在Ruby 1.9和2.0中,constants确实只包含公共常量.从2.1开始,no-arg constants仍然只包含公共常量,但设置inheritfalsewith constants(false)(即,仅列出在此模块中定义的常量,而不是在其祖先模块中)具有暴露私有常量的副作用.

ruby private-members

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

从NUnit测试代码创建iOS UI组件

我正在尝试编写一些以编程方式创建UIButton的代码的单元测试,但是当我从测试中调用此代码时,我得到了一个NullReferenceException.单步执行调试器,看起来像UIButton.FromType()返回null.

这是我正在测试的方法:

    public UIButton makeButton (String title, Action<IWelcomeController> action)
    {
        UIButton button = UIButton.FromType (UIButtonType.RoundedRect);
        // button is null here
        button.SetTitle(title, UIControlState.Normal);
        button.TouchUpInside += (sender, e) => {
            action(controller);
        };
        return button;
    }
Run Code Online (Sandbox Code Playgroud)

这是测试方法:

    [Test()]
    public void TestMakeButtonTitle ()
    {
        String title = "Elvis";
        UIButton button = GetFactory().makeButton(title, delegate(IWelcomeController w) {});
        Assert.AreEqual(title, button.Title(UIControlState.Normal));
    }
Run Code Online (Sandbox Code Playgroud)

我猜我需要做一些神奇的环境才能让MonoTouch.UIKit在真正的应用程序之外工作.任何提示?(如果不可能,建议采用其他方法?)

nunit uibutton uikit xamarin.ios

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

当替换文本与搜索文本重叠时,用Java替换多个子字符串

假设您有以下字符串:

cat dog fish dog fish cat
Run Code Online (Sandbox Code Playgroud)

要替换所有catsdogs,都dogs具有fish,和所有fishcats.直观地说,预期结果:

dog fish cat fish cat dog
Run Code Online (Sandbox Code Playgroud)

如果您尝试使用明显的解决方案,循环使用replaceAll(),您会得到:

  1. (原版的) cat dog fish dog fish cat
  2. (猫 - >狗) dog dog fish dog fish dog
  3. (狗 - >鱼) fish fish fish fish fish fish
  4. (鱼 - >猫) cat cat cat cat cat cat

显然,这不是预期的结果.那么最简单的方法是什么?我可以PatternMatcher(以及很多Pattern.quote()Matcher.quoteReplacement())一起拼凑一些东西,但我拒绝相信我是第一个遇到这个问题的人,并且没有库函数来解决它.

(FWIW,实际案例有点复杂,不涉及直接交换.)

java string replace

6
推荐指数
2
解决办法
8235
查看次数

什么在Tomcat 6配置文件中设置$ {catalina.home}?

我正在尝试调整一些旧的构建脚本来运行Tomcat 6的RPM安装,我遇到了以下问题:

java.lang.IllegalArgumentException: Document base /var/lib/tomcat6/webapps/host-manager does not exist or is not a readable directory
    at org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.java:142)
    at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4086)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4255)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:637)
    at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:563)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:498)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:516)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:593)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
Run Code Online (Sandbox Code Playgroud)

这不足为奇,因为Tomcat不在/var/lib/tomcat6,它在/usr/share/tomcat6.当我查找它可能来自哪里时,我发现的所有内容都在以下文件中host-manager.xml:

<Context docBase="${catalina.home}/webapps/host-manager"
     privileged="true" antiResourceLocking="false" antiJARLocking="false">

</Context>
Run Code Online (Sandbox Code Playgroud)

现在,我已经$CATALINA_HOME设置了 …

tomcat tomcat6

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

将Grails与现有Web应用程序集成

我们有一个用Tapestry 4.1编写的大型,笨重但相当稳定的Web应用程序,我们正在寻求逐步迁移.为此,我们正在考虑在Grails中开发一些新功能.我们的客户应该永远不会知道其中的差别,如果可能的话,没有人在内部,例如在安装服务,应该要照顾要么-理想情况下,Grails的应用程序将在同战争为现有Tapestry代码,只是GrailsDispatcherServlet配置了更具体的路径.这也是有变化的怪物生成过程为现有应用程序的最小关键-重做在甘特和常青藤构建系统(目前蚂蚁,过渡到Maven的)是不是一种选择.如果我们能够在开发期间使用爆炸的WAR进行实时重新加载,那将是很好的.

问题,然后:

  • 这可能吗?
  • 如果是这样,我从哪里开始?
  • 如果没有,那么下一个最好的方法是什么?
  • 我需要注意什么?

请注意我们不会使用GORM; 我们所有的数据都来自Web服务,我们已经拥有了Java域和消息传递层.

grails tomcat tapestry

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

如何在Gradle下增加Scala编译的PermGen空间?

我正在org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':compileScala'尝试使用Gradle构建我的Scala项目,如果我运行Gradle,--stacktrace看起来就像罪魁祸首一样java.lang.OutOfMemoryError: PermGen space.

我尝试分配编译任务并添加MaxPermSize到分叉的JVM参数,但所做的只是将OOME移到后面InvocationTargetException.

这是我build.gradlecompileScala任务块:

compileScala {
  options.fork = true
  options.forkOptions.jvmArgs = ['-XX:MaxPermSize=512m']
  scalaCompileOptions.additionalParameters = [
      "-feature",
      "-language:reflectiveCalls", // used for config structural typing
      "-language:postfixOps"
  ]
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以解决此通过使用全球增加PermGen的空间$JAVA_OPTIONS,但我更喜欢我可以这样就没有人需要本地定制任何建设项目与源检查的解决方案.

FWIW,我在Mac OS 10.9.3上的Java 1.6.0_65下使用Gradle 1.11和Scala 2.10.3.

scala permgen gradle

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

为什么使用正则表达式来验证Javascript中的纬度和经度?

当我搜索validate latitude longitude [javascript],我会得到无差别地匹配数字匹配错误范围的答案,或者只是太复杂而无法调试.

公平地说,其中一些OP确实要求正则表达式,并且Javascript不是我的第一语言,但它似乎更简单,更不容易出错,只是为了数学运算:

function isLatitude(maybeLat) {
  var latF = parseFloat(maybeLat)
  if (isNaN(latF)) return false
  return (latF >= -90 && latF <= 90)
}

function isLongitude(maybeLon) {
  var lonF = parseFloat(maybeLon)
  if (isNaN(lonF)) return false
  return lonF >= -180 && lonF <= 180
}
Run Code Online (Sandbox Code Playgroud)

是的,它不那么简洁,但它的可读性要高得多

^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$
Run Code Online (Sandbox Code Playgroud)

使用正则表达式有一些优势吗?性能?浏览器兼容?只允许正则表达式验证的库工具?SO用户炫耀他们疯狂的正则表达式sk1llz?

javascript

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