我想创建自己的模板,我可以传递一个对象,并让Soy模板迭代对象并拉出键和值.
如果我在JavaScript中有对象并调用Soy模板:
var obj = {'one':'a', 'two':b, 'three':c};
nameSpace.templateName({'paramValue': obj});
Run Code Online (Sandbox Code Playgroud)
我如何获得['one', 'two', 'three']价值?通常我会使用jQuery的each()功能,但我不知道如何在没有将对象转换为数组的情况下在Soy文件中做类似的事情.
我正在使用的对象具有已知的形式(没有嵌套对象,或者如果有的话,它们是提前知道并且已知的深度).欢迎使用嵌套对象的此答案或一般对象案例的答案.
{namespace nameSpace}
/**
* Prints keys and values of the object
* @param paramValue object with keys and values
*/
{template .templateName}
{$paramValue[0]} // undefined
{$paramValue.Keys} // undefined
{$paramValue.keys} // undefined
{$paramValue.one} // prints 'a'
{foreach $val in $paramValue}
// never reached
{/foreach}
{/template}
Run Code Online (Sandbox Code Playgroud) 我正在考虑用于数据绑定的html5,angularJS以及用于交互式Web应用程序的谷歌闭包编译器和闭包库.那些一起工作得很好吗?不幸的是,到目前为止似乎没有详细的报告.
我有adobe flex经验,但我对纯粹的js相当新.所以问题可以从初学者的角度来考虑.没有代码库需要移植,一切都将从头开发.
我已经找到一些或多或少的相关链接:
谷歌刚刚发布了Closure,这是一个缩小JavaScript的编译器.
在产品网站上,它说"Closure Compiler也与Page Speed集成".
如何使用Page Speed通过Closure编译我的网页JavaScript?
(或者,是否有一个网站,我可以简单地粘贴在我的JavaScript中以关闭缩小它?
有没有人有使用Google Closure Editor/WYSIWYG的经验?我想从CKEDITOR转到Google Closure Editor/WYSIWYG.理想情况下,我喜欢使用以太网编辑器,但似乎没有人将编辑器与所有应用程序分开.
无论如何,对于Google Closure Editor/WYSIWYG,有谁知道,它是否支持Google Docs中的实时协作方面?
我有一些包含JSON字符串的HTML.在on DOM ready回调中,我有这样的事情:
MyObject = JSON.parse($('#TheJsonString').html());
Run Code Online (Sandbox Code Playgroud)
后来在我的代码中,我写了一些东西:
var SomeVar = MyObject.MyProp1;
Run Code Online (Sandbox Code Playgroud)
然后,当我通过Google闭包编译器运行代码时,我收到警告
属性MyProp1从未在MyObject上定义.
如何编写代码以便它不会生成警告?
假设您正在使用具有多个外部库依赖项的javascript项目,并希望使用Google Closure Compiler以ADVANCED_OPTIMIZATIONS模式编译源代码.
由于在此模式下编译器会将代码调用重命名为外部库对象和函数,因此必须提供externs,以防止发生此重命名.
但是,手动生成externs需要做很多工作,那么,从给定的javascript lib自动生成适当的extern的最佳方法是什么?
我想使用ClojureScript编写Google Chrome扩展程序.使用ClojureScript,我可以使用所有Google Closure库,但这些库中不包含对Chrome浏览器的访问权限.所以我想在我自己的JavaScript库中包装所有Chrome内容.
到目前为止,我尝试创建自己的jar,它有一个JavaScript文件,只创建一个Foo对象并导出构造函数.我把这个jar添加到ClojureScript编译器的lib目录中(也有goog.jar),但到目前为止没有运气:
Exception in thread "main" java.lang.IllegalArgumentException: No implementation of method: :-compile of protocol: #'cljs.closure/Compilable found for class: nil
at clojure.core$_cache_protocol_fn.invoke(core_deftype.clj:494)
at cljs.closure$eval1056$fn__1057$G__1047__1064.invoke(closure.clj:187)
at cljs.closure$get_compiled_cljs.invoke(closure.clj:422)
at cljs.closure$cljs_dependencies.invoke(closure.clj:440)
at cljs.closure$add_dependencies.doInvoke(closure.clj:462)
at clojure.lang.RestFn.applyTo(RestFn.java:139)
at clojure.core$apply.invoke(core.clj:602)
at cljs.closure$build.invoke(closure.clj:701)
at user$eval1246.invoke(cljsc.clj:21)
at clojure.lang.Compiler.eval(Compiler.java:6406)
at clojure.lang.Compiler.load(Compiler.java:6843)
at clojure.lang.Compiler.loadFile(Compiler.java:6804)
at clojure.main$load_script.invoke(main.clj:282)
at clojure.main$script_opt.invoke(main.clj:342)
at clojure.main$main.doInvoke(main.clj:426)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at clojure.lang.Var.invoke(Var.java:405)
at clojure.lang.AFn.applyToHelper(AFn.java:163)
at clojure.lang.Var.applyTo(Var.java:518)
at clojure.main.main(main.java:37)
Run Code Online (Sandbox Code Playgroud)
有人曾尝试过这个吗?
在我的localhost开发期间,我试图自己托管libphonenumber库.我正在尝试以下方面:
<script src="//closure-library.googlecode.com/svn/trunk/closure/goog/base.js"></script>
<script>goog.require('goog.proto2.Message');</script>
<script src="scripts/vendor/pn/phonemetadata.pb.js"></script>
<script src="scripts/vendor/pn/phonenumber.pb.js"></script>
<script src="scripts/vendor/pn/metadata.js"></script>
<script src="scripts/vendor/pn/phonenumberutil.js"></script>
<script src="scripts/vendor/pn/asyoutypeformatter.js"></script>
Run Code Online (Sandbox Code Playgroud)
这是有效的,但我仍然依赖于外部托管的组件:闭包库.我尝试过使用closure-lite,它(显然,我是新来的)是一个非常完整的闭包库版本,可用于自托管.我尝试过以下操作:
<script src="scripts/vendor/closure-lite.js"></script>
<script>goog.require('goog.proto2.Message');</script>
<script src="scripts/vendor/pn/phonemetadata.pb.js"></script>
<script src="scripts/vendor/pn/phonenumber.pb.js"></script>
<script src="scripts/vendor/pn/metadata.js"></script>
<script src="scripts/vendor/pn/phonenumberutil.js"></script>
<script src="scripts/vendor/pn/asyoutypeformatter.js"></script>
Run Code Online (Sandbox Code Playgroud)
但是goog.proto2.Message没有.我收到以下错误:
Uncaught TypeError: Cannot read property 'Message' of undefined
Run Code Online (Sandbox Code Playgroud)
该错误来自phonemetadata.pb.js脚本:
goog.inherits(i18n.phonenumbers.NumberFormat, goog.proto2.Message);
Run Code Online (Sandbox Code Playgroud)
我能做些什么才能完全自我主持libphonenumber?
如何获取使用闭包模板创建的HTML?
<input name="fullName" class="large" type="text" data-validate="{required:true, minlength: 5, maxlength:100, messages:{required:'Please provide your Full Name.', maxlength:'This field can contain maximum 100 characters.'}}"/>
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏.
以下是我到目前为止所尝试的内容.
{namespace myApp.test}
/**
* Template for UI of Create User View
* @param userToEdit It is the object returned from GET on User Resource.
*/
{template .testUser autoescape="false"}
{{msg desc="<input id=\"fullName\" name=\"fullName\" class=\"large\" type=\"text\" value=\"{$userToEdit.FullName}\" data-validate=\"{required:true, minlength: 5, maxlength:100, messages:{required:\'Please provide your Full Name.\', maxlength:\'This field can contain maximum 100 characters.\'} }\" />"}}
{/template}
Run Code Online (Sandbox Code Playgroud)
返回Malformed attributes …
是否有可能从网页中的SVG元素接收拖放事件?
我尝试了Google Closure库,但无济于事.
具体来说,假设我的页面包含
<ul id = "list">
<li class="item" id="item1">foo</li>
<li class="item">bar</li>
<li class="item">baz</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
我的脚本包含(Clojurescript/C2)
(let [items (select-all ".item")
lst (select "#list")
target (fx/DragDrop. lst nil)]
(dorun (map
(fn [item]
(let [source (fx/DragDrop. item nil)]
(. source (addTarget target))
(. source (init))))
items))
(. target (init)))
Run Code Online (Sandbox Code Playgroud)
然后,我做得到拖动图像(鬼),虽然我不设法接收例如通过做拖动事件
(on-raw "#item1" :dragstart (fn [e] (.log js/console (str "dragstart " e))))
Run Code Online (Sandbox Code Playgroud)
使用类似的SVG元素代码,我甚至没有鬼......
任何提示?
谢谢
google-closure ×10
javascript ×5
angularjs ×1
clojure ×1
html5 ×1
minify ×1
svg ×1
templates ×1
wysiwyg ×1