`
magixyu
  • 浏览: 79435 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

Making Your Own Javascript Helper [Rails Recipes]

    博客分类:
  • ROR
阅读更多
写自己的magical one-liners for Javascript.
继续上一章的in_place_editor, 完成一个in_place_select_editor.

在rails里,InPlaceEditor是在 public/javascripts/control.js里面定义的,单击click会触发enterEditMode方法,然后由createForm()和createEditField()生成form.

目标:继承InPlaceEditor, 重写createEditField()完成select_editor.
创建一个新的js文件:public/javascripts/in_place_select_editor.js
	Ajax.InPlaceSelectEditor = Class.create();   
	Object.extend(Object.extend(Ajax.InPlaceSelectEditor.prototype,   
	                                          Ajax.InPlaceEditor.prototype), {   
	    createEditField: function() {   
	        var text = (this.options.LoadTextURL ? this.options.loadingText : this.getText()); // Updated
	         
	        this.options.textarea = false;   
	        var selectField = document.createElement("select");   
	        selectField.name = "value";   
	        selectField.innerHTML = this.options.selectOptionsHTML ||   
	                                    "<option>" + text + "</option>";   
	        $A(selectField.options).each(function(opt, index) {   
	            if(text == opt.value) {   
	                selectField.selectedIndex = index;   
	            }   
	        }   
	        );   
	            selectField.style.backgroundColor = this.options.highlightcolor;   
	            this.editField = selectField;   
	            if(this.options.loadTextURL) {   
	                this.loadExternalText();   
	            }   
	            this.form.appendChild(this.editField);   
	        }   
	 });  


把这个js文件加入到项目里
<%= javascript_include_tag "in_place_select_editor" %>


应用:
<span id="an_element_we_want_to_edit">Some Value</span>
<script type="text/javascript">
  new Ajax.InPlaceSelectEditor(
    'an_element_we_want_to_edit',
    '/an/update/url',
    { selectOptionsHTML: '<option>Blah</option>' +
                         '<option>Some Value</option>' +
                         '<option>Some Other Value</option>' });
</script>


刷新页面,就可以了(??? 不过选项是hardcoded ???)

下面来制作这个helper, 而不在view里面出现javascript
MakingYourOwnJavaScriptHelper /app/helpers/application_helper.rb
def in_place_select_editor_field(object, method,
                                 tag_options = {},
                                 in_place_editor_options = {})
  tag = ::ActionView::Helpers::InstanceTag.new(object, method, self)
  tag_options = { :tag => "span",
                  :id => "#{object}_#{method}_#{tag.object.id}_in_place_editor",
                  :class => "in_place_editor_field"}.merge!(tag_options)
in_place_editor_options[:url] =
  in_place_editor_options[:url] ||
  url_for({ :action => "set_#{object}_#{method}", :id => tag.object.id })
tag.to_content_tag(tag_options.delete(:tag), tag_options) +
in_place_select_editor(tag_options[:id], in_place_editor_options)
end


上面会产生如下的js的代码
MakingYourOwnJavaScriptHelper /app/helpers/application_helper.rb
def in_place_select_editor(field_id, options = {})
  function = "new Ajax.InPlaceSelectEditor("
  function << "' #{field_id}' , "
  function << "' #{url_for(options[:url])}' "
  function << (' , ' + options_for_javascript(
    {
      'selectOptionsHTML' =>
          %('#{escape_javascript(options[:select_options].gsub(/\n/, ""))}' )
    }
    )
  ) if options[:select_options]
  function << ' )'
  javascript_tag(function)
end


新的View是这个样子地。。。
MakingYourOwnJavaScriptHelper/app/views/contacts/show.rhtml
<p>
  <b>Name:</b>
    <%= in_place_editor_field :contact, :name %> <br />
  <b>Country:</b>
    <%= in_place_select_editor_field(
                 :contact,
                 :country,
                 {},
                 :select_options => country_options_for_select) %>
</p>
<br />

<%= link_to ' Back' , :action => ' list' %>
分享到:
评论

相关推荐

    Rails Recipes Final.pdf

    **Making Your Own JavaScript Helper**:创建自定义的JavaScript助手函数,用于简化常见的前端任务,提高代码可读性和可维护性。 3. **Showing a Live Preview**:显示实时预览,通常用于富文本编辑器等场景,让...

    Rails Recipes (2006) .pdf

    Making Your Own JavaScript Helper**:教会读者如何创建自定义的 JavaScript 辅助函数来简化常见的 UI 任务。 - **3. Showing a Live Preview**:介绍了一个技术,使得用户可以在输入时实时预览结果,增强用户体验...

    ruby rails recipes

    ### Ruby on Rails Web Development Recipes #### 重要知识点概述 本篇文档主要介绍了一本名为《Ruby on Rails Web Development Recipes》的书籍,该书由 Chad Fowler 编写,并由 The Pragmatic Bookshelf 出版。...

    Rails_Recipes_with_Source_Code

    《Rails Recipes with Source Code》是一本专注于Ruby on Rails框架实践技巧和源代码解析的书籍。Rails是基于Ruby语言的Web开发框架,以其“约定优于配置”(Convention over Configuration)的理念和“开发人员的...

    locstor, 用于 HTML5 localStorage的JavaScript helper 库.zip

    locstor, 用于 HTML5 localStorage的JavaScript helper 库 ## locstor.js 一个 localStorage helper 库支持所有现代浏览器和内容为什么是 locstor.js?API插件运行单元测试如何贡献问题/评论 ?让我们面对它,HTML5...

    javascript-helper:有助于在许多方面简化 JavaScript 代码的工具

    JavaScript Helper 是一个强大的工具,专为开发者设计,旨在简化JavaScript编码过程中的各种任务。这个工具集可以帮助程序员提高生产力,减少代码冗余,并确保代码的质量和可维护性。它包含了一系列实用的功能,涵盖...

    build-a-javascript-framework.pdf

    《构建JavaScript框架》这本书深入浅出地介绍了如何创建自己的JavaScript框架。书中的内容涵盖了框架设计的各个方面,旨在帮助读者理解并实践JavaScript框架的构建过程。 首先,书中提到了"Framework Style",这...

    JavaScript 教程chm+JavaScript Helpchm+JavaScript源代码集chm

    JavaScript是一种广泛应用于Web开发的脚本语言,它主要在客户端运行,为网页添加交互性和动态功能。本资源包包含了三个CHM(Compiled HTML Help)格式的文件,它们分别是"JavaScript教程.chm"、"JavaScript Help_...

    Rails 101 入门电子书

    ### Rails 101 入门电子书知识点详解 #### 一、简介 《Rails 101 入门电子书》是一本非常适合初学者直接入门的书籍,它由xdite编写并出版于2014年6月10日。本书主要针对的是希望学习Ruby on Rails框架的读者,特别...

    Rails相关电子书汇总

    标题 "Rails相关电子书...此外,书中可能还涵盖了Rails的安全实践、性能优化以及与其他技术(如JavaScript库)的集成等内容。对于希望深入理解Rails框架或想要提升Web开发技能的开发者来说,这本书是一个宝贵的资源。

    rails 项目起步示例

    Rails是Ruby语言的一个著名Web开发框架,全称为Ruby on Rails,它遵循MVC(Model-View-Controller)架构模式,旨在提高开发效率和代码可读性。本示例"rails项目起步示例"是一个购物系统,非常适合初学者入门学习。 ...

    ruby on rails(开发文档)

    7. **Helper方法**:为了保持视图的简洁,Rails允许你在helper模块中定义辅助方法,然后在视图中调用。 8. **测试驱动开发(TDD)**:Rails鼓励使用测试来驱动开发,内置了Test::Unit和RSpec等测试框架。 9. **...

    Ruby on Rails中文指南

    14. **AJAX和Unobtrusive JavaScript (UJS)**:Rails支持无侵入式JavaScript,通过数据属性和事件监听,使页面的部分内容能够异步更新,增强用户体验。 15. **ActiveJob**:Rails 4.2引入的ActiveJob是一个抽象层,...

    C# 各种helper类

    在C#编程中,"Helper"类是一种常见的设计模式,用于封装特定功能或一组相关功能,使得代码更易于理解和维护。这些Helper类通常包含了对常用数据类型、文件操作、网络通信等的便捷处理方法。以下将详细介绍标题和描述...

    foundation_rails_helper:Zurb基金会的Rails Helper框架

    gem 'foundation_rails_helper' , '~&gt; 3.0' 然后执行: $ bundle 兼容性 仅完全支持Rails 4.1 / 4.2 / 5/6和Foundation 6 某些功能可能适用于Foundation 5及更早版本,但结果可能会有所不同,并且

    javascript-helper:一些在 JavaScript 中经常使用的有用代码的汇编,以及更多

    javascript助手许多有用代码的汇编,在 JavaScript 中经常使用,还有更多。检查 IE: 我知道如何使用 IE(我们心爱的“Internet Explorer”)使用 a$$ 是一件非常痛苦的事情。 因此,这里有一个函数来确定 IE 版本...

    好用的rails 2.0 Api 文档

    Rails 2.0 API 文档是一个非常宝贵的资源,它为开发者提供了全面的指南,以便于在使用Ruby on Rails 2.0版本时更好地理解和利用其框架功能。Ruby on Rails(简称Rails)是一个开源的Web应用框架,它遵循MVC(模型-...

    C# .net core MongoDBHelper

    C# .net core MongoDBHelper C# .net core MongoDBHelper C# .net core MongoDBHelper C# .net core MongoDBHelper C# .net core MongoDBHelper C# .net core MongoDBHelper C# .net core MongoDBHelper C# .net ...

Global site tag (gtag.js) - Google Analytics