首页
/ Awesome Nested Fields 项目技术文档

Awesome Nested Fields 项目技术文档

2024-12-18 09:53:03作者:翟萌耘Ralph

1. 安装指南

Rails 3.1

  1. Gemfile 中添加以下内容,并运行 bundle install 以确保 gem 安装成功:

    gem 'awesome_nested_fields'
    
  2. app/assets/javascripts/application.js 文件中添加以下内容,以确保 JavaScript 依赖项被添加到 asset pipeline 中。请确保在 jQuery 和 jQuery UJS Adapter 之后添加此行:

    //= require jquery.nested-fields
    
  3. 现在你可以开始使用 awesome 嵌套模型了。

Rails 3.0

  1. Gemfile 中添加以下内容,并运行 bundle install 以确保 gem 安装成功。请确保在 jquery-rails 之后添加此行,以确保 JavaScript 文件按正确顺序添加到模板中:

    gem 'awesome_nested_fields'
    
  2. 使用生成器将 JavaScript 依赖项复制到 public/javascripts 目录:

    rails generate awesome_nested_fields:install
    
  3. (可选)JavaScript 依赖项将自动添加到默认的 JavaScript 文件中。如果你在模板中没有使用 javascript_include_tag :defaults,请手动引入文件:

    <script src="/javascripts/jquery.nested-fields.min.js" type="text/javascript"></script>
    
  4. 现在你可以开始使用 awesome 嵌套模型了。

2. 项目使用说明

模型设置

首先,确保具有 has_manyhas_and_belongs_to_many 关系的对象接受嵌套属性的集合。例如,如果一个 Person 模型有多个 Phone 模型,可以这样设置:

class Person < ActiveRecord::Base
  has_many :phones
  accepts_nested_attributes_for :phones, allow_destroy: true
end

accepts_nested_attributes_for 是 Active Record 的一个方法,允许你直接将嵌套模型的属性传递给父模型,而不是单独实例化每个子对象。

视图设置

接下来,在表单视图中使用 nested_fields_for 方法。它接收关联或集合名称、可选的选项哈希以及包含嵌套字段的块。例如:

<%= form_for(@person) do |f| %>
  <% # person fields... %>

  <h2>Phones</h2>
  <div class="items">
    <%= f.nested_fields_for :phones do |f| %>
      <fieldset class="item">
        <%= f.label :number %>
        <%= f.text_field :number %>

        <a href="#" class="remove">remove</a>

        <%= f.hidden_field :id %>
        <%= f.hidden_field :_destroy %>
      </fieldset>
    <% end %>
  </div>
  <a href="#" class="add">add phone</a>

  <% # more person fields... %>
<% end %>

nested_fields_for 方法列出了该 Person 拥有的 Phone,并添加了一个空的模板用于创建新的 Phone

JavaScript 设置

最后,在页面加载时激活嵌套字段操作。可以在 application.js 文件中添加以下内容:

$(document).ready(function(e) {
  $('FORM').nestedFields();
});

3. 项目API使用文档

视图选项

show_empty

有时你可能希望在集合为空时显示一些内容。只需将 show_empty 设置为 true,并在块中处理 nil 情况:

<%= f.nested_fields_for :phones, show_empty: true do |f| %>
  <% if f %>
    <% fields code... %>
  <% else %>
    <p class="empty">There are no phones.</p>
  <% end %>
<% end %>

JavaScript 选项

选择器

为了使嵌套字段动态工作,JavaScript 代码需要知道要使用的元素。默认情况下,这是通过用 CSS 类标记关键元素来完成的,但你也可以使用其他选择器:

  • itemSelector:标记集合中的每个项(默认 .item
  • containerSelector:标记包含项的元素(默认 .items
  • addSelector:标记用于添加新项的元素(默认 .add
  • removeSelector:标记用于删除项的元素(默认 .remove
  • emptySelector:标记在没有任何项时显示的元素(默认 .empty

回调函数

可以在项插入或删除之前或之后执行操作。有四个回调函数可用:beforeInsertafterInsertbeforeRemoveafterRemove。所有回调函数都接收项作为第一个参数:

element.nestedFields({
  beforeInsert: function(item) {
    item.css('color', 'red'); // 执行某些操作
    console.log(item + ' will be inserted.')
  },
  afterRemove: function(item) {
    console.log(item + ' was removed.');
  }
});

4. 项目安装方式

项目的安装方式已在“安装指南”部分详细说明。请根据你的 Rails 版本选择相应的安装步骤。

热门项目推荐
相关项目推荐

项目优选

收起
Python-100-DaysPython-100-Days
Python - 100天从新手到大师
Python
373
72
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
276
72
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
200
47
xzs-mysqlxzs-mysql
学之思开源考试系统是一款 java + vue 的前后端分离的考试系统。主要优点是开发、部署简单快捷、界面设计友好、代码结构清晰。支持web端和微信小程序,能覆盖到pc机和手机等设备。 支持多种部署方式:集成部署、前后端分离部署、docker部署
HTML
5
1
LangChatLangChat
LangChat: Java LLMs/AI Project, Supports Multi AI Providers( Gitee AI/ 智谱清言 / 阿里通义 / 百度千帆 / DeepSeek / 抖音豆包 / 零一万物 / 讯飞星火 / OpenAI / Gemini / Ollama / Azure / Claude 等大模型), Java生态下AI大模型产品解决方案,快速构建企业级AI知识库、AI机器人应用
Java
11
3
gin-vue-admingin-vue-admin
🚀Vite+Vue3+Gin的开发基础平台,支持TS和JS混用。它集成了JWT鉴权、权限管理、动态路由、显隐可控组件、分页封装、多点登录拦截、资源权限、上传下载、代码生成器【可AI辅助】、表单生成器和可配置的导入导出等开发必备功能。
Go
16
3
source-vuesource-vue
🔥 一直想做一款追求极致用户体验的快速开发平台,看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间对若依框架进行扩展写了一套快速开发系统。如此有了开源字节快速开发平台。该平台基于 Spring Boot + MyBatis + Vue & Element ,包含微信小程序 & Uniapp, Web 报表、可视化大屏、三方登录、支付、短信、邮件、OSS...
Java
24
2
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
898
0
madongmadong
基于Webman的权限管理系统
PHP
4
0
cool-admin-javacool-admin-java
🔥 cool-admin(java版)一个很酷的后台权限管理框架,Ai编码、流程编排、模块化、插件化、CRUD极速开发,永久开源免费,基于springboot3、typescript、vue3、vite、element-ui等构建
Java
18
2