如何在 twitter 引导程序中使用 Best In Place

Posted

技术标签:

【中文标题】如何在 twitter 引导程序中使用 Best In Place【英文标题】:how to use Best In Place with twitter bootstrap 【发布时间】:2013-01-25 15:02:04 【问题描述】:

我还没有看到这方面的任何文档..

如果我有

<%= best_in_place @user, :city,  type=> :input, %>

我需要包含 data-provide="typeahead"

<%= best_in_place @user, :city, type=> :input,:data => :provide => "typeahead" %>

并包含来源

<%= best_in_place @user, :city, :type=> :input, :data => :provide => "typeahead", :source => City.getcities.to_json %>

假设 City.getcities.to_json 返回带有城市名称的正确 json 列表

这行不通……

【问题讨论】:

你可以试试&lt;%= best_in_place @user, :city, :type=&gt; :input, :html_attrs =&gt; :'data-provide' =&gt; "typeahead", :'data-source' =&gt; City.getcities.to_json %&gt; 这是一个改进。似乎有效,但只有当我用键盘而不是鼠标从列表中选择时..这是一个提前输入的问题吗? 似乎是一个引导问题github.com/twitter/bootstrap/issues/4018 我无法尝试,所以这可能是 bootsrap 中的问题,也可能与 best_in_place 发生冲突,因为 best_in_place 还订阅了输入模糊和 keyup 事件... $('ul.typeahead').live('mousedown', function(e) e.preventDefault(); ); 似乎可以处理它 【参考方案1】:

使用:data 选项,您可以在生成的span 而不是input 本身上设置data- 属性。

如果您想在生成的input 元素上添加属性,您需要使用:html_attrs 选项:

<%= best_in_place @user, :city, :type=> :input, 
    :html_attrs => :'data-provide' => "typeahead", 
                    :'data-source' => City.getcities.to_json %>

但是 - 正如 @Nick Ginanto 所指出的 - 预输入选择仅适用于使用键盘而不是鼠标(可能是因为 bug in bootstrap 或因为有 no official support 最适合引导)

但是下面的代码 sn-p 似乎可以解决这个问题:

$('ul.typeahead').live('mousedown', function(e)  e.preventDefault(); );

【讨论】:

关于鼠标问题,上述解决方案对我不起作用。 好吧,鼠标悬停时列表消失的原因在bootstrap-typeahead.jsmouseleave() 函数中li:if (!this.focused &amp;&amp; this.shown) this.hide(),列表被隐藏,因为 best_in_place 输入字段被聚焦,而不是列表。注释掉那行对我来说已经足够了。

以上是关于如何在 twitter 引导程序中使用 Best In Place的主要内容,如果未能解决你的问题,请参考以下文章

在 jsFiddle 中使用 twitter 的引导程序

如何验证 twitter 引导表单向导

如何检查 Twitter 引导程序是不是已加载?

Twitter引导表分页

best_in_place nil 和编辑功能在带有引导应用程序的 rails4 上不起作用

Firefox 浏览器的 Twitter 引导程序中不显示下拉箭头