有没有办法在JSON中使用嵌套对象,所以我不必从所有内容中创建数组?为了我的对象没有错误地解析我似乎需要这样的结构:
{"data":[{"stuff":[
{"onetype":[
{"id":1,"name":"John Doe"},
{"id":2,"name":"Don Joeh"}
]},
{"othertype":[
{"id":2,"company":"ACME"}
]}]
},{"otherstuff":[
{"thing":
[[1,42],[2,2]]
}]
}]}
Run Code Online (Sandbox Code Playgroud)
如果我将这个对象提取到一个名为"result"的变量中,我必须像这样访问嵌套对象:
result.data[0].stuff[0].onetype[0]
Run Code Online (Sandbox Code Playgroud)
和
result.data[1].otherstuff[0].thing[0]
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎很笨拙和多余,如果可能的话我宁愿:
result.stuff.onetype[0]
Run Code Online (Sandbox Code Playgroud)
和
result.otherstuff.thing
Run Code Online (Sandbox Code Playgroud)
但是当一切都是数组时,如何直接使用对象键?对于我困惑和未受过教育的人来说,这样的事情似乎更合适:
{"data":
{"stuff":
{"onetype":[
{"id":1,"name": ""},
{"id":2,"name": ""}
]}
{"othertype":[
{"id":2,"xyz": [-2,0,2],"n":"Crab Nebula","t":0,"c":0,"d":5}
]}
}
{"otherstuff":
{"thing":
[[1,42],[2,2]]
}
}
}
Run Code Online (Sandbox Code Playgroud)
我可能在这里误解了一些基本的东西,但我无法获得jQuery解析器(也不是jQuery 1.4使用的本机FF解析器)来接受第二个样式对象.如果有人能够启发我将非常感激!
我正在尝试提出一个迭代函数,为六边形网格生成xyz坐标.使用起始十六进制位置(简单来说就是0,0,0),我想计算六边形的每个连续"环"的坐标,如下所示:

到目前为止,我已经设法提出的是这个(例如在javascript中):
var radius = 3
var xyz = [0,0,0];
// for each ring
for (var i = 0; i < radius; i++) {
var tpRing = i*6;
var tpVect = tpRing/3;
// for each vector of ring
for (var j = 0; j < 3; j++) {
// for each tile in vector
for(var k = 0; k < tpVect; k++) {
xyz[0] = ???;
xyz[1] = ???;
xyz[2] = ???;
console.log(xyz);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我知道每个环包含比前一个多6个点,每个120°向量包含从中心开始的每个步骤的一个附加点.我也知道x + y …
我被要求在具有RESTful URL且没有斜杠(.NET MVC)的页面上构建选项卡式部分,例如http:// myhost/books/the-amber-spyglass
为了使标签部分更加用户友好,我希望他们记住当用户四处移动时在每个页面上打开哪个选项卡,这样如果他们返回到一本书,他们之前在同一个选项卡上仍然打开.这是通过设置名为"tab"的cookie来实现的,其中值设置为tabid,路径设置为它们所在的页面(因此它不会影响其他页面上的选项卡).到目前为止,你认为是非常基本的东西,它确实也很好用.
进入Internet Explorer.
在IE中,它显示了一个带有路径/书籍/琥珀色 - 望远镜的cookie与上述URL不匹配,因此无法正确设置.如果我添加一个尾部斜杠,所以路径是/ books/the-amber-spyglass /而不是它工作正常 - 但我不能改变我们的URL模式,即使我可以"琥珀 - 望远镜"是一种资源,而不是夹.
有没有人有一个推荐的解决方案,这肯定是非常常见的问题?
提前谢谢了,
JS
我正在编写一个小型CMS作为jQuery AJAX插件,虽然它绝不是太长(目前大约500行),但我可以看到将它拆分成单独的文件会很好,每个"子类"一个:
(function($) {
$.fn.myCMS = function() {
this.classOne = function() {
...
}
this.classTwo = function() {
...
}
}
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我想将classOne的代码放在一个文件中,将classTwo放在另一个文件中,将myCMS"baseclass"放在第三个文件中.有可能用这样的东西(在每个"子类"文件中)实现这一点吗?
$.extend(myCMS,classOne = function() {
...
})
Run Code Online (Sandbox Code Playgroud)
非常感谢,
JS
好的,所以我已经转换了我的这个多皮肤的应用程序,以利用Rails 3.1中引入的资产管道.在大多数情况下,它非常简单,我喜欢预处理能力,它允许您在CSS/JS文件中使用内联Ruby.我遇到了一个主要问题,尽管Sprockets的强大功能似乎很难解决.我的应用程序可以在运行时选择任意数量的皮肤(或"身份")运行.这个"身份"参数设置了诸如缓存目录,数据库连接,视图路径之类的东西 - 实际上是资产路径.虽然所有"身份"都可以拥有自己的样式表,但还有一个共享的样式表可用于所有实例.所以assets文件夹结构看起来像这样:
在/app/assets/stylesheets/aplication.css.erb中:
<% require_asset("shared.css") %>
<% require_asset("overrides.css") %>
Run Code Online (Sandbox Code Playgroud)
这会加载两个样式表,关键是它使用配置的资产路径来解决它们(这就是我使用require_assets而不是标准require和include指令的原因,因为它们没有击中解析器).它返回找到的第一个匹配项,并允许我非常轻松地覆盖部分或全部默认样式.所以
/app/assets/stylesheets/shared.css
Run Code Online (Sandbox Code Playgroud)
可以通过在实例资源文件夹中放置具有相同名称的文件来覆盖
/app/assets/[identity]/stylesheets/shared.css
Run Code Online (Sandbox Code Playgroud)
如果没有这样的文件,它会默默地回退到默认的shared.css.
这一切都运行得非常出色 - 我对Javascripts,图像和字体使用相同的技术,并且在预编译期间一切都得到了整齐的处理和打包.但.有一种(横向)继承我无法实现; 有时身份的皮肤与另一个只有少数几条线条不同的皮肤(例如相同的布局但颜色方案不同)非常相似,我真的希望能够做到这样的事情:
资产/样式表/ application.css.erb:
<% require_asset("shared.css") %>
<% require_asset("overrides.css") %>
Run Code Online (Sandbox Code Playgroud)
资产/ current_identity /样式表/ overrides.css:
<% require_asset("../../some_other_identity/stylesheets/overrides.css") %>
/* followed by the dosen or so lines that differ for this skin */
...
Run Code Online (Sandbox Code Playgroud)
这个FAILS因为在当前上下文中"some_other_identity"不在资产路径中--Rails没有在开发模式下找到文件,当然它也不包括在预编译期间.如果我将它包含在资源路径中,则会加载错误的覆盖.css(只能有一个).所以我一直在尝试将这样的东西放在overrides.css的顶部:
<%= File.read(Rails.root.join("app/assets/some_other_identity/stylesheets/overrides.css")) %>
/* rest of CSS */
...
Run Code Online (Sandbox Code Playgroud)
事实上,这与预期一样有效.但.因为我现在正在使用资产管道来提供所有资产,所以我不能再使用固定路径引用CSS中的图像 - 我必须使用<%= asset_path("some_image.png") %>路径解析器才能发挥其魔力.这意味着我overrides.css的确是overrides.css.erb,当然,当您这样做时,ERB预处理不会发生 …
几个小时以来一直在努力解决这个简单的选择器问题,并且必须忽略一些显而易见的事情.我有一个<ul>在其中一些<li>■找嵌套<ul>秒.每个都<li>包含一个链接,当点击它时我想执行一个函数(而不是导航),但重要的是,这应该只发生在父包含的链接<ul>而不是嵌套中可能存在的任何链接<ul>.简单的你会想:
HTML:
<ul>
<li>
<a href="dontleavethis.page">A link</a>
<ul>
<li><a href="navigate.there">A nested link</a></li>
<li><a href="navigate.somewhere">Another nested link</a></li>
</ul>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
jQuery的:
$('li:has(ul) a').click(function() {
bla bla bla...
return false;
});
Run Code Online (Sandbox Code Playgroud)
事实是,无论我如何表达我的选择器,我都无法阻止嵌套中的链接<ul>触发点击处理程序.它们显然":has(ul)"与选择器的条件不匹配,但处理程序仍然因某种原因而附加.我在这做错了什么?