在
Ajax级联选择框:以中国的省市地区三级联动选择为例
篇中介绍了Rails应用Ajax技术实现三级联动菜单,本篇将介绍Rails应用ExtJs技术实现三级联动菜单。
需求: 允许用户只选择省、市、地区三者之一,同时
为了简化数据库表的结构,只设计一个字段(如, cid字段)来保留省、市、地区三者之一的id,这与
Ajax级联选择框
有所不同,后者是用三个字段来分别保存省、市、地区的id。
同时也是测试Rails应用ExtJs技术的效果。
步骤:
①、工具准备:1、 安装Rails插件acts_as_nested_set(附件)
2、下载ext的js文件包(附件),
将其解压到public目录下
②、确定数据库的设计,下面将省市地区数据以如下方式存入数据库的cities表(附件):
+--------+--------------+-----------+------+------+
| id | name | parent_id | lft | rgt |
+--------+--------------+-----------+------+------+
| 4122 | 中国 | 1 | 1 | 6464 |
| 110000 | 北京市 | 0 | 2 | 39 |
| 110101 | 东城区 | 110000 | 3 | 4 |
| 110102 | 西城区 | 110000 | 5 | 6 |
| 110103 | 崇文区 | 110000 | 7 | 8 |
| 110104 | 宣武区 | 110000 | 9 | 10 |
+--------+--------------+-----------+------+------+
这个数据库表是在Ajax级联选择框
篇的附件中的cities表基础上,结合ext tree的需要设计的,其中parent_id为父节点id、lft为左节点id、rgt为右节点id。至于如何生成parent_id、lft和rgt的值
,具体请步骤为:遍历citis -> 用sql 查出 下级 ->调用acts_as_nested_set插件的
add_child(child_object)方法,那么就会自动生成
parent_id、lft和rgt的值。
例如:参考: http://www.iteye.com/topic/177501
root = Category.create(
:text
=>
'Root'
)
root.add_child(c1 = Category.create(
:text
=>
'Child 1'
))
c1.add_child(Category.create(
:text
=>
'Child 1.1'
))
③、在cities表对应的模型内添加代码,声明、使用acts_as_nested_set插件,如下面代码片段所示:
class City < ActiveRecord::Base
acts_as_nested_set
def children_count
return (self[right_col_name] - self[left_col_name] - 1)/2
end
def leaf?
unknown? || children_count == 0
end
............
end
④、然后修改相应的Controller:
class CitiesController < ApplicationController
def cities_tree
(id = params[:node])
cdata = Array.new
c = City.find_all_by_parent_id( id || 1,:order => 'lft')
cdata = get_tree(c, nil)
render :text=>cdata.to_json
, :layout=>false
end
def get_tree(c, parent)
data = Array.new
c.each { |cc|
if !cc.leaf?
if data.empty?
data = [{"text" => cc.name,"id" => cc.id,
"cls" => "folder" ,"leaf" => false }]
else
data.concat([{"text" => cc.name,"id" => cc.id,
"cls" => "folder" ,"leaf" => false}])
end
else
data.concat([{"text" => cc.name,"id" => cc.id,
"cls" => "file","leaf" => true}])
end
}
return data
end
def index
@cities = City.all
respond_to do |format|
format.html
format.xml { render :xml => @cities }
end
end
end
⑤、 最后修改相应的视图:如公司所在地的选择框,首先所在地被保存在companies表的cid字段,那么在views/companies/new.html.erb,就可应用Ext.tree控件,实现公司所在地的树型选择,如下代码片段所示:
首先引入Ext的js文件:<%= javascript_include_tag :defaults %>
<%= stylesheet_link_tag "../ext/resources/css/ext-all.css" %>
<%= javascript_include_tag "../ext/adapter/prototype/ext-prototype-adapter.js" %>
<%= javascript_include_tag "../ext/ext-all.js" %>
<%= javascript_include_tag "../ext/ComboBoxTree.js" %>
其次使用ComboBoxTree生成下拉选择框:
<div id="comboboxtree" ></div>
<% javascript_tag do %>
Ext.onReady(function(){
var comboBoxTree = new Ext.ux.ComboBoxTree({
renderTo : 'comboboxtree',
name : 'company[cid]', //companies表的
cid
字段
id : 'company_cid', //companies表的
cid
字段
width : 250,
border: true,
valueField:"id",
tree : new Ext.tree.TreePanel({
loader: new Ext.tree.TreeLoader({
url:'/cities/cities_tree',
requestMethod:'GET',
baseParams:{format:'json'
}
}),
animate:true,
enableDD:true,
border:false,
containerScroll: false,
rootVisible:false ,
root: new Ext.tree.AsyncTreeNode({text: '中国',id:'0'})
})
});
comboBoxTree.render('comboboxtree');
});
<% end %>
上面的代码,是参照ExtJs官方网站上使用Ext.Tree控件的例子,修改的只是,数据提供部分,即上面的粗体部分。
下图是上代码的显示效果:用户选择了:
辽宁省 --> 鞍山市 --> 岫岩满族自治县

最终保存到companies
表的
cid
字段的值就是
"岫岩满族自治县" 对应于cities表里的id值,当然用户也可以只选择 " 辽宁省 --> 鞍山市" 或 "辽宁省" ,那么相应存入数据库的就是" 鞍山市" 的id 或 " 辽宁省" 的id。
而显示的时候,只要在cities表对应的Model添加一个encode()方法,利用acts_as_nested_set插件的self_and_ancestors来找到它的上级信息,如下代码片段所示:
def self.encode(id)
str = ''
if not id.nil? then
begin
self.self_and_ancestors.each {|c|
if not (c.name.include? '中国')
str += c.name
end
}
return str
rescue Exception => exc
logger.error("#{exc.message}")
return ""
end
end
end
视图里调用<%=h City.encode(@company.cid ) %>,那么虽然@company.cid = "岫岩满族自治县" 的id,但是显示的却是完整信息:"辽宁省鞍山市岫岩满族自治县"。
可见,在Rails项目中使用ExtJs技术是没问题的,而且
效果符合RIA(富客户端)的要求。
参考资料:http://www.iteye.com/topic/177501
http://www.iteye.com/topic/76860
http://api.rubyonrails.org/classes/ActiveRecord/Acts/NestedSet/ClassMethods.html

- 大小: 22.1 KB
分享到:
相关推荐
长江学者名单,来自网络
内容概要:本文介绍了基于COMSOL的单相变压器绕组及铁芯振动形变仿真模型。绕组在漏磁场的洛伦兹力作用下会发生振动并导致位移形变,而铁芯则因磁致伸缩效应产生振动形变。这两种形变都会影响变压器的性能和寿命。通过有限元仿真模型,特别是时域仿真,可以设置观察点并导出随时间变化的磁通、位移、压力和形变曲线,帮助研究人员更好地理解和解决这些问题。 适合人群:从事电力系统设备设计、制造和维护的技术人员,以及对有限元仿真感兴趣的科研人员。 使用场景及目标:①用于研究单相变压器绕组和铁芯的振动形变机理;②为优化变压器设计提供数据支持;③预测和预防变压器可能出现的问题,延长其使用寿命。 其他说明:文中提到的仿真模型不仅可以帮助理解变压器内部的工作机制,还可以为实际工程应用提供有价值的参考。
内容概要:本文介绍了一个基于Java语言实现的简单扑克牌游戏程序,详细阐述了游戏规则、功能模块设计、核心功能实现以及扩展建议。游戏使用标准52张扑克牌,支持2-4名玩家对战,玩家可出单张、对子、三张或顺子等牌型,牌型大小按三张>顺子>对子>单张排列。功能模块包括扑克牌类(Card)、牌堆管理类(Deck)、玩家类(Player)和游戏主逻辑类(PokerGame)。核心功能涵盖扑克牌的数据结构设计与比较规则、牌堆的初始化与洗牌发牌逻辑、玩家的手牌管理和游戏的回合制流程与胜负判定。; 适合人群:具有Java编程基础的学习者或开发者,尤其是对面向对象编程和游戏开发感兴趣的读者。; 使用场景及目标:①理解面向对象编程思想,掌握类与对象的定义和使用;②学习扑克牌游戏的基本规则和实现逻辑;③掌握Java语言中集合、枚举、接口等特性在实际项目中的应用;④为后续开发更复杂的扑克牌游戏打下基础。; 其他说明:本文提供了完整的代码实现和详细注释,有助于读者快速上手并理解每个部分的功能。同时,文中还给出了多项扩展建议,如增加牌型规则、优化交互界面、实现网络对战和AI对战系统等,鼓励读者在此基础上进行创新和改进。
cmd-bat-批处理-脚本-findEscapeQuote.zip
cmd-bat-批处理-脚本-循环-9.for-f-eol.zip
内容概要:本文探讨了基于灰狼算法的MPPT控制策略,旨在解决局部阴影遮挡和光照突变条件下传统MPPT算法难以实现最优跟踪的问题。文中详细介绍了灰狼算法的基本原理及其在光伏系统中的应用,提出了建立光伏系统的数学模型并利用灰狼算法优化输出电压和电流的方法。通过编写灰狼算法程序并在Matlab/Simulink中搭建仿真模型,验证了该策略的有效性和优越性。仿真结果显示,灰狼MPPT控制策略在复杂环境下具有更高的寻优精度和更强的适应性。 适合人群:从事太阳能光伏系统研究的技术人员、科研工作者及高校相关专业师生。 使用场景及目标:适用于需要优化光伏系统能量利用率的研究项目,特别是在存在局部阴影遮挡和光照突变的应用环境中。目标是提高光伏系统的稳定性和效率。 其他说明:未来可以通过进一步优化灰狼算法程序和模型,拓展其在更多类似优化问题中的应用,为太阳能光伏系统的智能化发展提供支持。
cmd-bat-批处理-脚本-check ad status.zip
内容概要:本文介绍了一种基于多通道卷积神经网络(MCCNN)的变压器故障诊断模型的研究与实现。针对传统诊断方法面对变压器内部故障种类繁多且隐蔽性强的问题,提出了利用MCCNN处理多维度振动信号的方法。通过不同大小的卷积核提取局部和全局特征,在不增加模型复杂度的情况下提高了故障识别能力。文中详细描述了MCCNN模型的构建步骤,包括数据预处理、卷积层和池化层的设计,以及MATLAB平台上的具体实现。实验结果显示,MCCNN模型在变压器故障诊断方面表现出更高的准确率和更好的泛化能力。 适合人群:从事电力系统维护、故障诊断领域的工程师和技术研究人员。 使用场景及目标:适用于需要提升变压器故障诊断精度和效率的实际应用场景,如电力公司、变电站等。目标是通过先进的机器学习技术改进现有诊断手段,减少误判并提高系统的可靠性。 其他说明:文章提供了详细的理论背景和技术细节,有助于读者深入理解MCCNN的工作机制及其在特定任务中的优势。同时,附带的变压器振动信号数据集为后续研究提供了宝贵的数据支持。
内容概要:本文详细探讨了利用COMSOL多物理场仿真软件进行水力压裂传热-应力-渗流-损伤模型的研究。文章介绍了水力压裂过程中涉及的多个物理现象及其相互作用,如流体流动、岩层变形、温度变化和岩层破坏。通过具体的数学公式展示了不同物理场之间的耦合关系,如应力计算、热量传递、压力分布和损伤演化。此外,文章还讨论了模型构建的方法以及仿真结果的应用价值,强调了通过优化流体注入速率等参数来提高压裂效率的实际意义。 适合人群:从事水力压裂技术研究的专业人士、地质工程研究人员、能源开发领域的工程师和技术人员。 使用场景及目标:适用于希望深入了解水力压裂多物理场耦合机制的研究人员,旨在通过仿真分析优化水力压裂过程,提高压裂效率并降低成本。 阅读建议:读者应具备一定的物理学和工程学背景,特别是对多物理场耦合有基本了解。建议结合实际案例进行学习,以便更好地理解和应用文中提到的技术和方法。
内容概要:本文详细介绍了如何使用Qt C++实现一个多功能的节点式图形编辑器。该编辑器具有左侧树形结构,支持面板缩放、节点间的输入输出接口连接以及图片导出功能。文章首先阐述了编辑器的基本架构和特性,接着逐步讲解了节点的添加与操作方法,包括通过右键菜单添加节点、鼠标选择并删除节点或线条。然后重点讨论了节点之间的接口连接机制,允许用户通过拖拽方式进行灵活的图形构建。最后,文章提到了图片导出功能,使用户能够保存编辑成果。此外,文中还简要提及了技术实现的关键点和技术细节,提供了部分代码片段供参考。 适合人群:对Qt C++有一定了解,希望深入学习图形编辑器开发的技术爱好者和开发者。 使用场景及目标:适用于需要开发复杂图形界面的应用程序,如数据流图绘制工具、流程设计器等。目标是掌握Qt C++在图形编辑器开发中的具体应用,提升编程技能。 其他说明:文中提供的源码已在特定版本(Qt5.6.1_MinGW、Qt5.13.1_MinGW)下验证通过,其他版本可能需要适当调整。
内容概要:本文深入探讨了利用Abaqus软件进行三点弯裂纹扩展的模拟研究,重点分析了骨料占比、骨料砂浆界面强度对混凝土断裂性能的影响,以及微裂缝的作用。同时,还讨论了混凝土水化热和浇筑温度场、应力场的相互影响。通过具体案例和技术细节的解析,展示了如何通过内聚力单元(COHESIVE)模拟混凝土材料内部的应力、应变行为,揭示了不同因素对混凝土性能的具体影响。 适合人群:从事土木工程、材料科学研究的专业人士,尤其是对混凝土性能有深入研究需求的工程师和科研人员。 使用场景及目标:适用于需要评估混凝土结构安全性和耐久性的项目,旨在优化工程设计并提高混凝土的使用寿命。通过对裂纹扩展机制的理解,可以更好地预防和解决实际工程中的问题。 阅读建议:读者应在已有一定的混凝土材料基础知识和有限元分析经验的基础上,结合实际工程案例进行理解和应用。文中涉及的技术细节和难点部分,建议反复研读并结合实际操作加深理解。
内容概要:本文详细介绍了两级式电力电子变换器的仿真模型及其构建方法。前级采用三相全桥整流电路,用于将380V交流电转换为直流电;后级则为闭环Buck电路,利用PI控制实现10V直流电的稳定输出。整个模型在MATLAB/Simulink环境中搭建,通过仿真验证了系统的性能和稳定性。文中不仅展示了具体的电路设计步骤,还提供了详细的仿真参数设置和结果分析。 适合人群:从事电力电子技术研究的专业人士、高校相关专业师生、对电力电子变换器感兴趣的工程技术人员。 使用场景及目标:适用于需要理解和掌握两级式电力电子变换器工作原理和技术细节的人群。通过本模型的学习,能够深入了解三相全桥整流和闭环Buck电路的设计思路,掌握MATLAB/Simulink仿真工具的应用技巧。 其他说明:该模型不仅有助于理论研究,还能为实际工程项目提供有价值的参考。通过对仿真结果的分析,可以优化电路设计,提高系统的效率和可靠性。
cmd-bat-批处理-脚本-splitCommand.zip
cmd脚本-bat批处理-8.DecimalConversion.zip
内容概要:本文详细介绍了如何使用Python进行变压器励磁涌流的仿真复现,重点探讨了磁饱和效应对电流波形的影响。首先构建了一个非线性电感模型,利用欧拉法求解电路微分方程,展示了励磁涌流的典型特征——尖峰衰减波形。接着引入了两台变压器并列运行的情况,讨论了因参数差异导致的环流问题及其潜在危害。最后加入了磁滞效应,使仿真更加贴近实际情况。文中还提到了仿真过程中需要注意的关键参数调整方法。 适合人群:从事电力系统仿真研究的技术人员、高校相关专业学生、对电力电子感兴趣的开发者。 使用场景及目标:适用于需要深入理解变压器励磁涌流特性的场合,如电力设备保护设计、故障诊断等领域。目标是帮助读者掌握励磁涌流产生的机理,提高对电力系统的认知水平。 阅读建议:本文提供了完整的Python代码示例,建议读者跟随代码逐步实践,同时关注关键参数的选择和调整,以便更好地理解和应用所学知识。
如何快速判断目标函数的凸性?如何判断一个矩阵是正定的?函数组合的凸性传递规律是什么?函数凸性总结
win7系统下,运行qt程序,提示缺少api-ms-win-core-winrt-l1-1-0.dll 的解决方法,对应的dll复制到程序根目录即可
cmd脚本-bat批处理-2.Shift-MoreArgument0.zip
内容概要:本文深入探讨了Turbo码及其相关信道编码技术,涵盖线性分组码、卷积码、RSC递归系统卷积码、交织、解交织、咬尾卷积编码、打孔删余及Log-Map译码算法等关键概念和技术细节。文中不仅解释了各编码方法的工作原理,还展示了通过调整编码器参数和打孔删余策略实现的不同码率(如1/3、1/5)的灵活变换,并提供了误码率和误包率仿真的实例图表,帮助读者更好地理解和评估Turbo码的实际性能。 适合人群:从事数字通信领域的研究人员、工程师和技术爱好者,尤其是对信道编码技术和Turbo码有浓厚兴趣的专业人士。 使用场景及目标:适用于需要深入了解信道编码原理及其应用的研究项目、工程设计和技术培训。目标是掌握Turbo码的设计思路、编码译码流程及其优化方法,提升通信系统的可靠性和抗噪能力。 其他说明:本文不仅提供理论讲解,还包括具体的代码实现和仿真结果,使读者能够在实践中验证所学知识。