我建立一个大型的JavaScript应用程序,我决定使用尼古拉斯Zakas的可扩展应用程序的架构设计: http://developer.yahoo.com/yui/theater/video.php?v=zakas-architecture
根据他的系统,模块是自封装的,彼此不了解......但是我在项目中遇到了很多实例,模块似乎需要彼此了解,因为它们本质上是个体整体的一部分.
例如..我有三个模块:上传,窗口和管理器.
单击上载选项时,将打开一个带有上载表单的弹出窗口.窗口"manager"上也有一个链接.
单击管理器链接会更新弹出窗口以显示管理工具...
...
它对我来说最有意义(伪代码):
upload module:
upload option click --> sandbox.notification('need pop up window', [...html markup for form...])
manager module:
manager link click --> sandbox.notification('need pop up window', [...html markup for admin tools...])
window module:
sandbox.listen('need pop up window') --> calls createPopUpWindow( passed in html markup )
Run Code Online (Sandbox Code Playgroud)
...然而这违背了哲学原因,因为上传和管理器模块专门"请求"窗口模块做某事,因此他们知道它...
所以,我能想到的另一种方法是:
upload module:
upload option click --> sandbox.notification('upload option clicked', [...html markup for form...])
manager module:
manager link click --> sandbox.notification('manager link clicked', [...html markup for admin tools...]) …Run Code Online (Sandbox Code Playgroud) 我正在尝试获取通用地址的邮政编码,例如"los angeles,ca".当我这样做:
gcode = new google.maps.Geocoder()
gcode.geocode({'address': 'Los Angeles, CA'}, function(results, status) { log(results); });
>> [Object { address_components=[4], formatted_address="Los Angeles, CA, USA", geometry={...}, more...}]
Run Code Online (Sandbox Code Playgroud)
我得到一个没有邮政编码的对象返回...但是,如果我然后从那里返回的位置对象,那么我可以访问一个zipcode:
gcode.geocode({'latLng': results[0].geometry.location}, function(results, status) { log(results[0].address_components[7].long_name) });
>> "90012"
Run Code Online (Sandbox Code Playgroud)
..但这似乎很浪费,因为我不得不两次打电话给API来做这件事.有没有办法强迫谷歌最初给我一个邮政编码?
我有一个生产应用程序,有时我看到这个错误出现在日志中..我似乎无法复制它在我的结尾,所以似乎有一个用户在那里的某些特定设置/ cookies /等导致这个问题.我不知道......该日志表明,该用户被重定向到这个回调URL:"用户/认证/ Facebook的/回调代码= AQCayaAoFOruFgwbfg1D682j8DbxOt0CZYNH3Vv5RtYKlQgSzISyN8ygTn25W_RTl3fu35cS1-tl5ArZ9B_XylwORP0hGU6st8P6TyTYUzfiR1m0poaSRkX-KBeWiBvT6IUsm-Af0VJcUNTQPg-dM1F9y5CgJ2bTJEJqhCE9wYlvkUY3kguwcl3TQ48FTT4-PHA ///?"
实际错误是:
RuntimeError: #<OAuth2::Response:0x1da7fae0 @error=#<OAuth2::Error: OAuth2::Error>, @options={:parse=>:query}, @parsed={"{\"error\":{\"message\":\"Invalid verification code format.\",\"type\":\"OAuthException\"}}"=>nil}, @response=#<Faraday::Response:0x1da8fa80 @on_complete_callbacks=[], @env={:response=>#<Faraday::Response:0x1da8fa80 ...>, :request_headers=>{"Content-Type"=>"application/x-www-form-urlencoded"}, :body=>"{\"error\":{\"message\":\"Invalid verification code format.\",\"type\":\"OAuthException\"}}", :status=>400, :url=>#<Addressable::URI:0xed52bf0 URI:https://graph.facebook.com/oauth/access_token>, :request=>{:proxy=>nil}, :parallel_manager=>nil, :response_headers=>{"expires"=>"Sat, 01 Jan 2000 00:00:00 GMT", "access-control-allow-origin"=>"*", "content-type"=>"text/javascript; charset=UTF-8", "connection"=>"close", "www-authenticate"=>"OAuth \"Facebook Platform\" \"invalid_code\" \"Invalid verification code format.\"", "date"=>"Thu, 13 Oct 2011 15:58:29 GMT", "content-length"=>"81", "cache-control"=>"no-store", "x-fb-rev"=>"457598", "x-fb-server"=>"10.65.13.60", "pragma"=>"no-cache"}, :ssl=>{:ca_file=>"/etc/pki/tls/certs/ca-bundle.crt"}, :method=>:post}>>
Run Code Online (Sandbox Code Playgroud)
参数是:
{"code"=> "AQCayaAoFOruFgwbfg1D682j8DbxOt0CZYNH3Vv5RtYKlQgSzISyN8ygTn25W_RTl3fu35cS1-tl5ArZ9B_XylwORP0hGU6st8P6TyTYUzfiR1m0poaSRkX-KBeWiBvT6IUsm-Af0VJcUNTQPg-dM1F9y5CgJ2bTJEJqhCE9wYlvkUY3kguwcl3TQ48FTT4-PhA///",
"action"=>"",
"controller"=>""}
Run Code Online (Sandbox Code Playgroud)
我知道如果我手动转到"users/auth/facebook/callback?code = blah"它会触发同样的错误,因为回调代码参数显然是假的,但看起来并没有任何关于实际代码的可疑信息.用户的参数哈希 - 所以我想知道为什么它会是一个无效的格式?
还有其他人经历过这个吗?
我有一个带有模板的角度指令,其执行的操作类似于:
<img ng-src="{{url}}" />
Run Code Online (Sandbox Code Playgroud)
在我的测试中,我正在设置范围,以便url指向一个虚构的图像...... Karma然后说:
WARN [web-server]: 404: /fake.png
Run Code Online (Sandbox Code Playgroud)
所以我进入我的业力配置文件并添加到文件数组:
{pattern: 'spec/javascripts/fixtures/**/*.png', watched: false, included: false, served: true},
Run Code Online (Sandbox Code Playgroud)
然后添加代理:
proxies: {
'/fake.png': 'spec/javascripts/fixtures/assets/fake.png'
}
Run Code Online (Sandbox Code Playgroud)
...
现在我得到:
WARN [proxy]: failed to proxy spec/javascripts/fixtures/assets/fake.png ([object Object])
Run Code Online (Sandbox Code Playgroud)
?
那条路是正确的,那里有一个名为fake.png的真实图像.
我的配置中的basePath也正确设置为我项目的根目录...
所以,如果我循环并创建一个li/a标签的集合,我会按预期得到..这些标签的数组:
(1..5).to_a.map do
content_tag(:li) do
link_to("boo", "www.boohoo.com")
end
end
=> ["<li><a href=\"www.boohoo.com\">boo</a></li>", "<li><a href=\"www.boohoo.com\">boo</a></li>", "<li><a href=\"www.boohoo.com\">boo</a></li>", "<li><a href=\"www.boohoo.com\">boo</a></li>", "<li><a href=\"www.boohoo.com\">boo</a></li>"]
Run Code Online (Sandbox Code Playgroud)
我打电话给他们加入我得到一个预期的字符串......
(1..5).to_a.map do
content_tag(:li) do
link_to("boo", "www.boohoo.com")
end
end.join
=> "<li><a href=\"www.boohoo.com\">boo</a></li><li><a href=\"www.boohoo.com\">boo</a></li><li><a href=\"www.boohoo.com\">boo</a></li><li><a href=\"www.boohoo.com\">boo</a></li><li><a href=\"www.boohoo.com\">boo</a></li>"
Run Code Online (Sandbox Code Playgroud)
但是,如果我在ol标签中深入嵌套这一级...
content_tag(:ol) do
(1..5).to_a.map do
content_tag(:li) { link_to("boo", "www.boohoo.com") }
end.join
end
=> "<ol><li><a href="www.boohoo.com">boo</a></li><li><a href="www.boohoo.com">boo</a></li><li><a href="www.boohoo.com">boo</a></li><li><a href="www.boohoo.com">boo</a></li><li><a href="www.boohoo.com">boo</a></li></ol>"
Run Code Online (Sandbox Code Playgroud)
我逃脱了内心的疯狂!
在查看rails源代码时:
def content_tag(name, content_or_options_with_block = nil, options = nil, escape = true, &block)
if block_given?
options = content_or_options_with_block if content_or_options_with_block.is_a?(Hash)
content_tag_string(name, capture(&block), options, escape) …Run Code Online (Sandbox Code Playgroud) 我加入了我的.irbrc:
IRB.conf[:PROMPT].reverse_merge!(:RAILS_ENV => {:PROMPT_I=>"#{current_app} #{rails_env} #{prompt} ", :PROMPT_N=>"#{current_app} #{rails_env} #{prompt} ", :PROMPT_S=>nil, :PROMPT_C=>"?> ", :RETURN=>"=> %s\n"})
IRB.conf[:PROMPT_MODE] = :RAILS_ENV
Run Code Online (Sandbox Code Playgroud)
如果我这样做:
current_app = "\e[31mfoo_bar_app\e[0m"
rails_env = "\e[32m#{RAILS_ENV}\e[0m"
Run Code Online (Sandbox Code Playgroud)
然后提示显示漂亮的颜色,但如果我将一些文本复制到我的copybuffer并粘贴它,如果我进行页面向上/向下翻页以转到当前输入的文本的开头/结尾,我的光标就像跳转到在页面向上的文本中间,对于向下翻页,它向右跳到一个没有输入任何内容的空白区域,然后我的光标位置完全搞砸了.
有没有办法可以纠正这个问题?我真的很喜欢彩色提示.
是吗:
GET api/stuff?ids[]=123&ids[]=456&ids[]=789&ids[]=101112&etc...
Run Code Online (Sandbox Code Playgroud)
是吗:
POST api/stuff/batch
body: ids: [123, 456, 789, 101112, etc]
Run Code Online (Sandbox Code Playgroud)
?
第一个在语义上似乎是正确的,但除了有一个令人难以置信的粗俗 url,还有消息来源说 get 的长度可能有限制,那么如果我有无数个 id 怎么办?
第二个似乎更好,因为没有粗略的 url,但我对休息的理解是 POST 应该进行更改,而不是幂等的。
那么这纯粹是一个语义问题,没有真正的“正确”方式吗?
我有一个.js.erb模板,我正在做:
var foo = <%= [1,2,3] %>;
var foo2 = <%= [1,2,3].to_json %>;
var foo3 = <%= ["bar"].to_json %>;
var foo4 = <%= {:foo => "bar"}.to_json %>;
Run Code Online (Sandbox Code Playgroud)
foo等于123
foo2等于[1,2,3]
foo3未定义(因为浏览器抱怨解析错误)
foo4未定义(因为浏览器抱怨解析错误)
我能弄清楚如何使foo3工作的唯一方法是:
var foo3 = "<%= ['bar'].to_json %>"; # foo3 => "["bar"]"
foo3.replace(/"/g, "\"")) # => "['bar']" <-- looks like eval should work...
eval(foo3.replace(/"/g, "\""))[0]; # => "bar" ... it works
Run Code Online (Sandbox Code Playgroud)
我无法以这种方式工作......我尝试过:
var foo4 = <%= "{:foo => 'bar'}.to_json" %>; # foo4 => "{"foo:":"bar"}" %>;
foo4.replace(/"/g, "\"")); # => "{"foo":"bar"}" …Run Code Online (Sandbox Code Playgroud) 我在我的界面中有这个:
@property (nonatomic, weak) NSTimeInterval *timeStamp;
Run Code Online (Sandbox Code Playgroud)
其中我的逻辑告诉我,我需要一个时间戳对象,只有将是由此类实例化它的上下文中使用,所以"弱"似乎是合乎逻辑的我 - 但XCode的告诉我:"产权与'弱'属性必须是对象类型"...如果我只是这样做:
@property (nonatomic) NSTimeInterval *timeStamp;
Run Code Online (Sandbox Code Playgroud)
然后错误就消失了,但我不确定我明白为什么......
我可以获得拥有多个用户的帐户集合:
Account.group('accounts.id HAVING count(users.id) > 1').joins(:users)
Run Code Online (Sandbox Code Playgroud)
但是,只要我在该对象上调用.count,就会发生巨大的爆炸:
(0.3ms)SELECT COUNT(*)AS count_all,accounts.id HAVING count(users.id)> 1 AS accounts_id_having_count_users_id_1 FROM"accounts"INNER JOIN"users"ON"users"."account_id"="accounts"."id "GROUP BY accounts.id HAVING count(users.id)> 1 ActiveRecord :: StatementInvalid:PG :: Error:ERROR:语法错误在"AS"处或附近第1行:... unt_all,accounts.id HAVING count(用户) .id)> 1个AS帐户......
似乎在postgres中,我想要的实际查询是:
select count(*) from (SELECT accounts.id FROM "accounts" INNER JOIN "users" ON "users"."account_id" = "accounts"."id" GROUP BY accounts.id HAVING count(users.id) > 1) as a;
Run Code Online (Sandbox Code Playgroud)
如何获取activerecord来生成此(或类似的)查询?
javascript ×2
ruby ×2
activerecord ×1
api-design ×1
geolocation ×1
google-maps ×1
ios ×1
irb ×1
karma-runner ×1
oauth ×1
objective-c ×1
rest ×1