<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>gihnius</title>
    <link>https://ruby-china.org/gihnius</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>Crystal for Rubyists</title>
      <description>&lt;p&gt;&lt;a href="http://www.crystalforrubyists.com/index.html" rel="nofollow" target="_blank"&gt;http://www.crystalforrubyists.com/index.html&lt;/a&gt;&lt;/p&gt;</description>
      <author>gihnius</author>
      <pubDate>Wed, 25 Jan 2017 11:23:36 +0800</pubDate>
      <link>https://ruby-china.org/topics/32209</link>
      <guid>https://ruby-china.org/topics/32209</guid>
    </item>
    <item>
      <title>坑： 关于两个星号捕获参数的使用 **hash</title>
      <description>&lt;p&gt;代码：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;pry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="ss"&gt;a: &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;b: &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;:a&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:b&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;pry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;hh&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;c: &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;:a&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:b&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:c&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;pry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;hhh&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s2"&gt;"a"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"b"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"a"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"b"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;pry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;hhhh&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;hhh&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"c"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="no"&gt;TypeError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;wrong&lt;/span&gt; &lt;span class="n"&gt;argument&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="no"&gt;String&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;expected&lt;/span&gt; &lt;span class="no"&gt;Symbol&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pry&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="ss"&gt;:in&lt;/span&gt; &lt;span class="sb"&gt;`__pry__'
[5] pry(main)&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ruby 2.x 增加了 keyword arguments, 而 **hash 也只是针对 keyword arguments 的。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://stackoverflow.com/questions/25191747/why-does-double-splat-only-work-with-symbol-keys" rel="nofollow" target="_blank"&gt;http://stackoverflow.com/questions/25191747/why-does-double-splat-only-work-with-symbol-keys&lt;/a&gt;&lt;/p&gt;</description>
      <author>gihnius</author>
      <pubDate>Fri, 06 Jan 2017 09:25:07 +0800</pubDate>
      <link>https://ruby-china.org/topics/32066</link>
      <guid>https://ruby-china.org/topics/32066</guid>
    </item>
    <item>
      <title>带投票功能的 ruby-china，不是 up/down 那种投票。</title>
      <description>&lt;p&gt;把之前帮人做二次开发时弄的投票功能 merge 到 ruby-china 的&lt;a href="https://github.com/ruby-china/ruby-china/commit/858b60dff8aad3f449d347a2669d5c3e932966dd" rel="nofollow" target="_blank" title=""&gt;最新代码&lt;/a&gt;里面。
不知道有没有必要 send pull request 呢？实现得可能有点粗糙，看起来大致如图：&lt;/p&gt;
&lt;h2 id=""&gt;&lt;img src="https://l.ruby-china.com/photo/2015/0f3ea38970f2f8702f5b744d469e9f94.jpg" title="" alt=""&gt;&lt;/h2&gt;&lt;h2 id=""&gt;&lt;img src="https://l.ruby-china.com/photo/2015/305ddefeacf74912767cf7c9b65a4c41.jpg" title="" alt=""&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2015/e6b86413d355c77a7f58e3124db9d688.jpg" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;merge: &lt;a href="https://github.com/gihnius/ruby-china" rel="nofollow" target="_blank"&gt;https://github.com/gihnius/ruby-china&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;大致功能：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;单选，多选，匿名，公开投票&lt;/li&gt;
&lt;li&gt;选项数目限制&lt;/li&gt;
&lt;li&gt;投票无法更改，目前只可以在发布新话题时发布投票&lt;/li&gt;
&lt;li&gt;设置投票有效期&lt;/li&gt;
&lt;li&gt;没有了，好简单&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;有兴趣可以试试，不知道 merge 过程有没有遗漏，因为最近 ruby-china 代码变动好大。&lt;/p&gt;</description>
      <author>gihnius</author>
      <pubDate>Wed, 20 May 2015 12:01:00 +0800</pubDate>
      <link>https://ruby-china.org/topics/25668</link>
      <guid>https://ruby-china.org/topics/25668</guid>
    </item>
    <item>
      <title>Ruby C extension 中怎么把 C wchar 类型和 ruby string 互相转换？</title>
      <description>&lt;p&gt;没有找到相关的 API，只有默认的 string &amp;lt;-&amp;gt; char*。&lt;/p&gt;</description>
      <author>gihnius</author>
      <pubDate>Mon, 04 May 2015 10:01:28 +0800</pubDate>
      <link>https://ruby-china.org/topics/25416</link>
      <guid>https://ruby-china.org/topics/25416</guid>
    </item>
    <item>
      <title>用 JavaScript 写 Mac App !</title>
      <description>&lt;p&gt;传送门： &lt;a href="https://www.v2ex.com/t/148980#reply2" rel="nofollow" target="_blank"&gt;https://www.v2ex.com/t/148980#reply2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.apple.com/library/mac/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/index.html" rel="nofollow" target="_blank"&gt;https://developer.apple.com/library/mac/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/index.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lists.apple.com/archives/applescript-users/2014/Jun/msg00004.html" rel="nofollow" target="_blank"&gt;http://lists.apple.com/archives/applescript-users/2014/Jun/msg00004.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/tylergaw/js-osx-app-examples" rel="nofollow" target="_blank"&gt;https://github.com/tylergaw/js-osx-app-examples&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/dtinth/JXA-Cookbook" rel="nofollow" target="_blank"&gt;https://github.com/dtinth/JXA-Cookbook&lt;/a&gt;&lt;/p&gt;</description>
      <author>gihnius</author>
      <pubDate>Tue, 25 Nov 2014 10:15:51 +0800</pubDate>
      <link>https://ruby-china.org/topics/22846</link>
      <guid>https://ruby-china.org/topics/22846</guid>
    </item>
    <item>
      <title>只有一个 domain ssl 证书，又想让静态文件不附带 cookie 请求，有没有办法破？</title>
      <description>&lt;p&gt;因为要上 ssl, 但是又不想买 wildcard ssl 证书，那货贵太多。
那么只有一个域名，怎么让静态文件不附带 cookie 一起请求呢？
想过限定每个 cookie 的 path，但会产生太多 cookie 不靠谱。
有没有别的办法？&lt;/p&gt;</description>
      <author>gihnius</author>
      <pubDate>Tue, 17 Jun 2014 23:03:43 +0800</pubDate>
      <link>https://ruby-china.org/topics/20015</link>
      <guid>https://ruby-china.org/topics/20015</guid>
    </item>
    <item>
      <title>试玩 Google Compute Engine. 价格也不便宜!</title>
      <description>&lt;p&gt;刚试用了下，启动的 instance 是没有 ec2 那种  instance storage 的。
网上大多数介绍 gce 和 ec2 比价的都没有强调这点。每启动 instance 都要自己创建 disk，加起来价钱跟 ec2 也差不多！
这些 (所有) instances 类型都没有 instance storage 的:(好像之前曾经有过)
&lt;img src="//l.ruby-china.com/photo/2014/d23f8f6fd3023de02e656205631ebe47.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;另外吐槽一下 aws ec2 的 instance storage &lt;strong&gt;捆绑销售&lt;/strong&gt; 太狠了！&lt;/p&gt;

&lt;p&gt;管理方面，ec2 还是比 gce 方便。&lt;/p&gt;</description>
      <author>gihnius</author>
      <pubDate>Tue, 20 May 2014 13:28:01 +0800</pubDate>
      <link>https://ruby-china.org/topics/19410</link>
      <guid>https://ruby-china.org/topics/19410</guid>
    </item>
    <item>
      <title>jquery.qeditor 编辑器的  Bootstrap3 版本</title>
      <description>&lt;p&gt;修复更新到 bootstrap3:
&lt;a href="https://github.com/gihnius/jquery.qeditor" rel="nofollow" target="_blank"&gt;https://github.com/gihnius/jquery.qeditor&lt;/a&gt;
bootstrap2 应该还有不少人在用，所以不打算 merge 到 &lt;a href="http://huacnlee.com/blog/jquery-qeditor-introduction/" rel="nofollow" target="_blank" title=""&gt;原始版本&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://i.imgur.com/DgRqupP.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;全屏
&lt;img src="http://i.imgur.com/pp56xPi.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;演示
&lt;a href="http://cdn.qufor.com/jquery_qeditor/" rel="nofollow" target="_blank"&gt;http://cdn.qufor.com/jquery_qeditor/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.qufor.com/topics/53609e957cc1f85101000002" rel="nofollow" target="_blank" title=""&gt;应用例子&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;实现太简单了，感觉兼容性可能不那么好。在 Safari/Chrome 下表现不错！&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;更新&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;加了支持粘贴 &lt;a&gt; 标签，sanitize 注意处理 &lt;/a&gt;&lt;a&gt; 的属性。&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>gihnius</author>
      <pubDate>Wed, 30 Apr 2014 16:26:32 +0800</pubDate>
      <link>https://ruby-china.org/topics/18940</link>
      <guid>https://ruby-china.org/topics/18940</guid>
    </item>
    <item>
      <title>踩到 Bootstrap3 popover 的一个坑</title>
      <description>&lt;p&gt;&lt;a href="http://www.qufor.com/topics/533765337cc1f81ddb00002c" rel="nofollow" target="_blank" title=""&gt;原文&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;在实现显示投票用户的功能的时候 (&lt;a href="http://www.qufor.com/topics/53355ad97cc1f81813000002" rel="nofollow" target="_blank" title=""&gt;看这里&lt;/a&gt;) , 想把用户名直接用 bootstrap3 的 popover 展示。需要在 popover 里面动态加载用户名列表。&lt;/p&gt;

&lt;p&gt;开始时这么干的：&lt;/p&gt;

&lt;p&gt;html:&lt;/p&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"javascript:void(0);"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"voted-users-popover"&lt;/span&gt; &lt;span class="err"&gt;....&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;显示该选项用户&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"javascript:void(0);"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"voted-users-popover"&lt;/span&gt; &lt;span class="err"&gt;....&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;显示该选项用户&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"javascript:void(0);"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"voted-users-popover"&lt;/span&gt; &lt;span class="err"&gt;....&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;显示该选项用户&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;js:&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// setup popover&lt;/span&gt;
&lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;a.voted-users-popover&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;each&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;popover&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
       &lt;span class="na"&gt;html&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
           &lt;span class="c1"&gt;// call ajax and return the content html.&lt;/span&gt;
           &lt;span class="c1"&gt;// 这里 ajax call 应该是设置 async = false.&lt;/span&gt;
       &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="p"&gt;});&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ok, 好像是工作了.
但是 Debug 时发现在每次点击 voted-users-popover 时应用的日志却显示 &lt;strong&gt;两个&lt;/strong&gt; requests.
查看浏览器的 console 也发现，这里的函数被执行了两次：&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt;&amp;gt; getting voted users list...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// call ajax and return the content html.&lt;/span&gt;
    &lt;span class="c1"&gt;// 这里 ajax call 应该是设置 async = false.&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这是不该出现的结果。&lt;/p&gt;

&lt;p&gt;然后是，各种折腾... google..., 大半天后才想起 bootsrap3 的源代码！&lt;/p&gt;

&lt;p&gt;找到 popover.js, 发现下面的代码：&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Popover 是继承/扩展自 Tooltip 的, getTitle() 在 tooltip.js 里面定义的&lt;/span&gt;
&lt;span class="nx"&gt;Popover&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hasContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getTitle&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getContent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="c1"&gt;// 如果提供 title 就不会执行 getContent()&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;Popover&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;$e&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;$element&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;o&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;options&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;$e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;attr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;data-content&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;function&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt;
          &lt;span class="nx"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;$e&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
          &lt;span class="nx"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

  &lt;span class="c1"&gt;// 如果 content 是一个函数, 这里就会调用该函数返回 content&lt;/span&gt;
  &lt;span class="c1"&gt;// 而在 popover/tooltip 执行 show 方法时, 是先检查有没有 content `hasContent()` 之后, 再调用 `setContent()` 来 render popover div 的. `setContent()` 当然也得执行 `getContent()`.&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;好吧！明显这样会调用两次 content 的函数！&lt;/p&gt;

&lt;p&gt;所以，只有给一个 title 吧：&lt;/p&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"javascript:void(0);"&lt;/span&gt; &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;"显示该选项用户"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"voted-users-popover"&lt;/span&gt; &lt;span class="err"&gt;....&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;显示该选项用户&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"javascript:void(0);"&lt;/span&gt; &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;"显示该选项用户"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"voted-users-popover"&lt;/span&gt; &lt;span class="err"&gt;....&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;显示该选项用户&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"javascript:void(0);"&lt;/span&gt; &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;"显示该选项用户"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"voted-users-popover"&lt;/span&gt; &lt;span class="err"&gt;....&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;显示该选项用户&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果不设置 title, 能不能解决？
试试 content 不由函数提供！那怎么动态加载 content ?
html 里删除 title,
js:&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// setup popover&lt;/span&gt;
&lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;a.voted-users-popover&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;each&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;popover&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
       &lt;span class="na"&gt;html&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;center&amp;gt;&amp;lt;i class="fa fa-spin fa-spinner"&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/center&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="c1"&gt;// 调用 popover 的 shown 事件来加载内容&lt;/span&gt;
    &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;shown.bs.popover&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="c1"&gt;//...&lt;/span&gt;
        &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ajax&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="c1"&gt;// 这次不用 async = false 了!&lt;/span&gt;
            &lt;span class="na"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;good&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;div.popover-content&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;html&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;html_from_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
                    &lt;span class="c1"&gt;// popover div 在 el 的下面.&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;div.popover-content&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;html&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ok, 好像也工作了，经测试没有两次 requests 了。&lt;/p&gt;

&lt;p&gt;但也带来一个新的问题，动态内容是在 popover 弹出 (shown) 后加载的，也就是 popover div 的位置已经固定了，渲染内容后整体的位置可能不是你所期望的！&lt;/p&gt;

&lt;p&gt;不过最后还是采用的后面的方案！因为可以方便地显示一个 loading... 菊花！&lt;/p&gt;

&lt;p&gt;当然，还有第三种方案：&lt;/p&gt;

&lt;p&gt;自己去实现一个类似 popover 的东西...&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;补充:
总结就是:
通过 $(e).popover({}) 初始化 popover 的 content 时，如果 没有初始化 e 的 title 且这个 content 是函数，那么它会被执行两次。&lt;/p&gt;</description>
      <author>gihnius</author>
      <pubDate>Sun, 30 Mar 2014 13:14:05 +0800</pubDate>
      <link>https://ruby-china.org/topics/18258</link>
      <guid>https://ruby-china.org/topics/18258</guid>
    </item>
    <item>
      <title>之前问学 Ruby on Rails 需要些什么东东的可以看看这个</title>
      <description>&lt;p&gt;&lt;a href="https://www.codefellows.org/blogs/this-is-why-learning-rails-is-hard" rel="nofollow" target="_blank"&gt;https://www.codefellows.org/blogs/this-is-why-learning-rails-is-hard&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://dgosxlrnzhofi.cloudfront.net/custom_page_images/production/64/page_images/Rails_Competencies.png?1386276348" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>gihnius</author>
      <pubDate>Sun, 30 Mar 2014 02:00:10 +0800</pubDate>
      <link>https://ruby-china.org/topics/18253</link>
      <guid>https://ruby-china.org/topics/18253</guid>
    </item>
    <item>
      <title>自找亮点.</title>
      <description>&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/2014/8e58fc29b1cb92de673ea5dfe908ae34.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;最近被烦死了，找 google 发泄一下，没想到，发现了...&lt;/p&gt;</description>
      <author>gihnius</author>
      <pubDate>Fri, 14 Mar 2014 13:00:26 +0800</pubDate>
      <link>https://ruby-china.org/topics/17874</link>
      <guid>https://ruby-china.org/topics/17874</guid>
    </item>
    <item>
      <title>ruby-china 每页只有 15 个话题，太少了，能不能加多点？</title>
      <description>&lt;p&gt;不想翻页，一次看个够。至少 30-50+ 个话题吧！&lt;/p&gt;

&lt;p&gt;补充一下：
两个手指一划，几秒钟几十个话题就看到了！比翻页快！&lt;/p&gt;</description>
      <author>gihnius</author>
      <pubDate>Sat, 08 Mar 2014 10:44:26 +0800</pubDate>
      <link>https://ruby-china.org/topics/17734</link>
      <guid>https://ruby-china.org/topics/17734</guid>
    </item>
    <item>
      <title>刚才一下子看到一堆应该过去出现的 [提醒].</title>
      <description>&lt;p&gt;大概是什么原因呢？&lt;/p&gt;</description>
      <author>gihnius</author>
      <pubDate>Fri, 07 Mar 2014 00:04:58 +0800</pubDate>
      <link>https://ruby-china.org/topics/17707</link>
      <guid>https://ruby-china.org/topics/17707</guid>
    </item>
    <item>
      <title>这种写法已经流行起来了吗？</title>
      <description>&lt;p&gt;在网页内引用 URL 时省略 http: https, 即直接 //doamin.name/path/to/res
我知道大多数浏览器自动加上 http:或 https:
有没有人发现这有什么弊端？&lt;/p&gt;</description>
      <author>gihnius</author>
      <pubDate>Thu, 27 Feb 2014 16:59:44 +0800</pubDate>
      <link>https://ruby-china.org/topics/17535</link>
      <guid>https://ruby-china.org/topics/17535</guid>
    </item>
    <item>
      <title>ruby-china 新界面取消 Breadcrumb , 你觉得应该保留还是不?</title>
      <description>&lt;p&gt;我也不喜欢 Breadcrumb, 理由是它占据非常重要的页面位置但信息量很少。&lt;/p&gt;

&lt;p&gt;你们觉得呢？&lt;/p&gt;

&lt;p&gt;想听听更加合理的想法，好让我取消&lt;a href="http://www.qufor.com" rel="nofollow" target="_blank" title=""&gt;这里&lt;/a&gt;的 Breadcrumb, 😄&lt;/p&gt;</description>
      <author>gihnius</author>
      <pubDate>Wed, 12 Feb 2014 13:42:54 +0800</pubDate>
      <link>https://ruby-china.org/topics/17191</link>
      <guid>https://ruby-china.org/topics/17191</guid>
    </item>
    <item>
      <title>[bootstrap] 什么情况下适合用 navbar-fixed-top ?</title>
      <description>&lt;p&gt;RT&lt;/p&gt;

&lt;p&gt;fixed-top 有什么特别好处么？&lt;/p&gt;</description>
      <author>gihnius</author>
      <pubDate>Tue, 31 Dec 2013 15:16:22 +0800</pubDate>
      <link>https://ruby-china.org/topics/16538</link>
      <guid>https://ruby-china.org/topics/16538</guid>
    </item>
    <item>
      <title>时不时看到这种页面?</title>
      <description>&lt;p&gt;safari 浏览器。新打开都跟上一页混到一起了。是 turbo link 还是电脑都问题呢？想看还是得再 load 一遍。&lt;/p&gt;

&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/2013/bfc4bd7418c1efc08a2d3a7611490646.png" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>gihnius</author>
      <pubDate>Sat, 28 Dec 2013 11:23:48 +0800</pubDate>
      <link>https://ruby-china.org/topics/16475</link>
      <guid>https://ruby-china.org/topics/16475</guid>
    </item>
    <item>
      <title>Go 冲到顶了 (Web Framework Benchmarks)</title>
      <description>&lt;p&gt;&lt;a href="http://www.techempower.com/benchmarks/#section=data-r8&amp;amp;hw=i7&amp;amp;test=json" rel="nofollow" target="_blank"&gt;http://www.techempower.com/benchmarks/#section=data-r8&amp;amp;hw=i7&amp;amp;test=json&lt;/a&gt;&lt;/p&gt;</description>
      <author>gihnius</author>
      <pubDate>Wed, 18 Dec 2013 11:24:56 +0800</pubDate>
      <link>https://ruby-china.org/topics/16270</link>
      <guid>https://ruby-china.org/topics/16270</guid>
    </item>
    <item>
      <title>想知道这里有没有人用过这个网站 rubynow</title>
      <description>&lt;p&gt;&lt;a href="http://jobs.rubynow.com/" rel="nofollow" target="_blank"&gt;http://jobs.rubynow.com/&lt;/a&gt;&lt;/p&gt;</description>
      <author>gihnius</author>
      <pubDate>Fri, 06 Dec 2013 19:18:32 +0800</pubDate>
      <link>https://ruby-china.org/topics/16047</link>
      <guid>https://ruby-china.org/topics/16047</guid>
    </item>
    <item>
      <title>新网站上线！求点评!</title>
      <description>&lt;p&gt;&lt;a href="http://www.qufor.com/" rel="nofollow" target="_blank"&gt;http://www.qufor.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.qufor.com/topics/52973f067cc1f87728000005" rel="nofollow" target="_blank" title=""&gt;首页截图&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/2013/aa6c586ae53630207754bb8ac87d9b0f.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;更新截图：&lt;/p&gt;

&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/2014/e4ef087f05ee2c03ddcffa2b021a580d.png" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>gihnius</author>
      <pubDate>Sun, 01 Dec 2013 13:53:32 +0800</pubDate>
      <link>https://ruby-china.org/topics/15919</link>
      <guid>https://ruby-china.org/topics/15919</guid>
    </item>
  </channel>
</rss>
