`
Enn
  • 浏览: 28513 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

使用rails虚拟属性配合前台js处理时间

阅读更多
Helper方法用于虚拟属性的时间转换。

module Admin::TimeFormatsHelper
  # hh:mm:ss => seconds
  def forward_time_convert(time_virtual)
    time_collect = time_virtual.split(":")
    time_collect[0].to_i*3600 + time_collect[1].to_i*60 + time_collect[2].to_i
  end
  
  # seconds => hh:mm:ss
  def reverse_time_convert(time_real)
    time_real = time_real.to_i
    return "00:00:00" if time_real == 0
    time_collect = {}
    
    time_collect[:second]= keep_in_type(time_real%60)
    time_collect[:minute]= keep_in_type((time_real/60)%60)
    time_collect[:hour]= keep_in_type(time_real/3600)
    
    return "#{time_collect[:hour]}:#{time_collect[:minute]}:#{time_collect[:second]}"
  end

end


model使用示例
class TimeEntry < ActiveRecord::Base
  include Admin::TimeFormatsHelper
  
  def spend_time_virtual
    reverse_time_convert(self.spend_time)
  end
  
  def spend_time_virtual=(time_virtual)
    self.spend_time = forward_time_convert(time_virtual)
  end
end


ui上使用的js. 附带了form lock。 当用户输入错误时锁死form。
// Auto convert time format like  1 => 00:01:00, 61 => 01:01:00, "character except [0-9] and ':'" => error.
// Prevent form submit if there is any error in it.
function auto_time_convert(obj){
	// Check if obj.value have unaccepted character. return error or continue. ":" max size is 2. overage should return error	
	var accepted_character = new RegExp("^\\d+\\:?\\d*\\:?\\d*$", "g");
	if(accepted_character.test(obj.value)){
		// if there no ":" in obj.value means the value unit is minute
		// if obj.value like "2:3" means it's 2 minutes 3 seconds
		// 100:00:00 => 100:00:00, 10:70:70 => 11:11:10

		var standard_format_time = "";
		var time_array = String(obj.value).split(":");

		switch(time_array.length){
			case 1:
				minutes = Number(time_array[0]);
				standard_format_time = time_convert(minutes*60);
				break;
			case 2:
				minutes = Number(time_array[0]);
				seconds = Number(time_array[1]);
				standard_format_time = time_convert(minutes*60 + seconds);
				break;
			case 3: 
				hours = Number(time_array[0]);
				minutes = Number(time_array[1]);
				seconds = Number(time_array[2]);
				standard_format_time = time_convert(hours*3600 + minutes*60 + seconds);
				break;
		}
		obj.value = standard_format_time;
		
		$(obj).removeClass("error_input");
		
		// Check if there is any error input field in form
		if($(".time_convert_area input.error_input").length == 0){
			$("#form_lock").val("");			
		}
	}else{
		$(obj).addClass("error_input");
		$("#form_lock").val("lock");
	}
}

function time_convert(total_seconds){
    var time_collect = [];

    time_collect[0]= keep_in_type(parseInt(total_seconds/3600));
    time_collect[1]= keep_in_type(parseInt((total_seconds/60)%60));
    time_collect[2]= keep_in_type(parseInt(total_seconds%60));
    
    return time_collect.join(":");
}

function keep_in_type(quantity){
	if (String(quantity).length >= 2){
		return quantity;
	}else{
		return "0" + quantity;	
	} 
}

function is_form_lock(){
	if($("#form_lock").val() == ""){
		return true;
	}else{
		return false;
	}
}
分享到:
评论

相关推荐

    rails中使用javascript日期控件

    在Rails开发中,为了增强用户体验,常常需要使用JavaScript来处理日期选择和管理。这篇博客“rails中使用javascript日期控件”探讨的就是如何在Rails应用中集成JavaScript日期控件,特别是通过一个名为WebCalendar....

    Rails3-使用ajax处理并发

    标题 "Rails3-使用ajax处理并发" 涉及的是在Ruby on Rails 3框架中如何利用Ajax技术处理并发请求。Rails是一个流行的Web应用程序开发框架,它基于Ruby语言,而Ajax(Asynchronous JavaScript and XML)则是一种允许...

    使用Aptana+Rails开发Rails Web应用(中文)

    例如,要在Rails应用中创建一个新的资源,如博客文章,你需要在models目录下创建一个名为`post.rb`的文件,定义Post类,并设置属性如标题和内容。在controllers目录下创建`posts_controller.rb`,定义控制器方法,如...

    Rails上的API:使用Rails构建REST APIAPIs on Rails: Building REST APIs with Rails

    在本篇内容中,我们将深入探讨如何利用Ruby on Rails(简称Rails)这一强大的Web应用程序框架来构建可伸缩且易于维护的RESTful API。Rails以其简洁优雅的语法、高效的开发速度以及良好的社区支持而闻名,这使得它...

    Ruby-Webpacker使用Webpack在Rails中管理类似app的JavaScript模块

    Webpacker是Ruby on Rails框架中一个非常重要的工具,它允许开发者使用Webpack来管理和打包应用程序中的JavaScript模块。Webpacker的引入,使得Rails应用可以利用Webpack的强大功能,如模块化、热加载、代码分割和树...

    使用RSpec 测试Rails 程序.pdf

    ### 使用RSpec 测试Rails 程序的知识点总结 #### 一、RSpec与Rails结合的基础概念 **RSpec**(RSpec is not a unit testing framework)是一种为Ruby编程语言设计的行为驱动开发(BDD)框架,而**Rails**是基于...

    rails指南 中文版

    9. **ActiveJob**:Rails的后台任务处理框架,可以配合各种队列服务(如Resque、Sidekiq等)处理异步任务。 10. **Rails Console**:提供了一个交互式的命令行工具,用于检查和调试应用,执行Ruby代码,以及与...

    Rails项目源代码

    这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何利用Rails的强大功能来创建一个允许用户上传、分享和浏览图片的应用。 1. **Rails框架基础**: Rails的核心理念是DRY(Don't...

    Ruby-GoOnRails使用Rails生成器来生成一个Golang应用

    这个工具简化了在Rails项目中使用Go进行后端处理的流程,使开发者可以利用Go的性能优势处理高并发请求,同时保留Rails的便捷开发体验。 ### 2. 安装`GoOnRails` 首先,确保你的系统已经安装了Rails和Go。接下来,...

    Ruby on Rails:Rails中的表单处理.docx

    Ruby on Rails:Rails中的表单处理.docx

    klog2, 使用 Rails4 & angular.js 创建的博客应用程序.zip

    klog2, 使用 Rails4 & angular.js 创建的博客应用程序 Klog使用 Rails 4.x 和 Angular.js 创建的博客应用程序屏幕截图 更多截图我的博客地址 http://chaoskeh.com演示版地址 http://klog-

    rails api(文档)

    8. **安全考虑**:Rails API通常需要与OAuth2、JWT(JSON Web Tokens)或其他身份验证机制配合,以确保API的安全性。 9. **Rate Limiting**:防止恶意用户或脚本滥用API,Rails API可以通过中间件(如Rack::Attack...

    关于rails 3.1 cucumber-rails 1.2.0

    Asset Pipeline优化了前端资源的处理,Cucumber-Rails则提供了强大的测试工具,确保代码的质量和功能符合业务需求。这样的组合对于保持代码的整洁、提高团队协作效率和降低维护成本具有重要意义。 总的来说,了解和...

    railsAPI

    最后,Rails API的应用往往需要与前端框架如React、Vue.js或Angular配合,通过前端路由和状态管理工具构建单页应用(SPA),以提供更好的用户体验。 总的来说,Rails API 提供了一套完整的框架,用于构建高效、易于...

    Rails3 使用rake启动后台任务

    Rails3 是 Ruby on Rails 框架的一个版本,它在2010年发布,引入了许多新特性并改进了框架的性能。Rake 是 Ruby 的一个构建工具,类似于 Java 的 Ant 或者 Python 的 setup.py,它允许开发者用自然语言定义任务,并...

    Rails101_by_rails4.0

    《Rails101_by_rails4.0》是一本专注于Rails 4.0.0版本和Ruby 2.0.0版本的自学教程书籍,它定位于中文读者,旨在成为学习Rails框架的参考教材。Rails(Ruby on Rails)是一个采用Ruby语言编写的开源Web应用框架,它...

    rails4.0.0

    Rails 4中的Asset Pipeline进行了优化,提升了静态资源如CSS、JavaScript的处理速度。这个功能允许开发者合并、压缩和版本化静态资源,以减少HTTP请求并提高页面加载速度。 6. **Strong Parameters** 为了解决...

    rails2-sample

    从给定的文件信息来看,我们正在探讨的是一本关于Ruby on Rails的书籍,书名为《Simply Rails2》,作者是Patrick Lenz。本书旨在为初学者提供深入理解Ruby on Rails框架的指南,从基础概念到高级主题均有涵盖,是...

Global site tag (gtag.js) - Google Analytics