Jquery 表格工具 — 2dc_jqgrid————–
Posted by wosmvp on May 24th, 2009 filed in Plugin, Rails应用, web前端技术, 敏捷开发, 测试方法Comment now »
它整合了 InPlaceEdit,分页,搜索,添加,删除等功能,甚至还可以处理附属关系的表格
功能不可谓不强大,但代码却是来的简单的很!
————————–
- Ajax enabled - Sorting - Pagination - Search - CRUD operations (add, edit, delete) - Multi-selection (checkboxes) - Master-details - Themes - And more ... --------------
The jQuery grid plugin is an amazing Javascript project providing multi-functions Ajax datagrids for your web applications.简而言之,居家旅行杀人放火逃命跳墙之必备良品!
在官方文档面前,任何其它文档都是失色的 http://www.2dconcept.com/jquery-grid-rails-plugin
在这里就不无聊的敷述一下过程了
简单的谈几其它个问题:
1,它的例子代码太“重量级”:
针对它第一个例子方法的优化:
原方法:
users = User.find(:all) do if params[:_search] == "true" pseudo =~ "%#{params[:pseudo]}%" if params[:pseudo].present? firstname =~ "%#{params[:firstname]}%" if params[:firstname].present? lastname =~ "%#{params[:lastname]}%" if params[:lastname].present? email =~ "%#{params[:email]}%" if params[:email].present? role =~ "%#{params[:role]}%" if params[:role].present? end paginate :page => params[:page], :per_page => params[:rows] order_by "#{params[:sidx]} #{params[:sord]}" end
修改后:
users = User.find(:all) do |x| if params[:_search] == "true" [:pseudo,:firstname,:lastname,:email,:role].map do |m| x.send(m) =~ "%#{params[m]}" if params[m].presend? end end paginate :page => params[:page], :per_page => params[:rows] order_by "#{params[:sidx]} #{params[:sord]}" end
2, 第二个问题就是如果你上面的order_by排序排字字段使用了SQL的关键字会出现问题的!
上解决方案:
order_by “`#{params[:sidx]}` #{params[:sord]}” if
!params[:sidx].blank?
3,上我自己做的中文翻译
点击下载
你需要修改javascripts/jqgrid/jquery.jqGrid.js第10行附近来使用此中文翻译
并且我还修改了源码 vendor/plugins/2dc_jqgrid/lib/2dc_jqgrid.rb第233行,将其中的caption “Search” 修改为“搜索”
(PS:我知道偷偷修改源码,这是很不好的的做法,那怕是字符串的修改,但实在没有找到更优雅一点的办法,有时间再深入它的源码看看吧
Nginx + Passenger 开发Rails应用
Posted by devon on May 22nd, 2009 filed in Rails应用1 Comment »
在Rails开发过程中,如果同时开发多个项目,需要经常切换,使用 script/server 去启动应用会比较麻烦,而采用nginx(或apache) + passenger可以节约时间,提高效率。
1、安装passenger
下载Passenger,目前最新的版本为2.2.2,并解压到passenger的安装目录:
1 2 | tar xzvf passenger-2.2.2.tar.gz /usr/local/passenger ./passenger-2.2.2/bin/passenger-install-nginx-module |
按提示操作安装nginx与passenger。
也可以通过gem方式来安装:
1 2 | gem install passenger
passenger-install-nginx-module |
2、配置nginx
/usr/local/nginx/conf/nginx.conf,在http段加上:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | http{ ... passenger_root /usr/local/passenger; passenger_ruby /usr/local/bin/ruby; server { listen 80; server_name app1; root /Users/jack/app1/public; passenger_enabled on; rails_env development; } server { listen 80; server_name app2; root /Users/jack/app2/public; passenger_enabled on; rails_env development; } ... } |
3、启动与停止nginx的命令
假设nginx安装在/usr/local/nginx目录里。将如下命令加到~/.bashrc(linux)、 ~/.bash_profile(Mac)
1 2 3 | alias sn='sudo /usr/local/nginx/sbin/nginx' alias kn='sudo kill `cat /usr/local/nginx/logs/nginx.pid `' alias rn='kn; sn' |
4、增加应用的host到/etc/hosts,如:
1 2 | 127.0.0.1 app1 127.0.0.1 app2 |
这样,在开发时,可以在浏览器中,直接用app1, app2去访问各个应用,再也不用去script/server之类的了。
Leopard为不同的应用程序保留输入法状态
Posted by devon on February 11th, 2009 filed in Uncategorized1 Comment »
Mac 10.5(Leopard)去掉了为单独窗口设置单独输入法的选项,取而代之的是全局输入法,需要不停的切换切换切换,很不方便。(这个功能在tiger上还可以使用的)
用inputswitcher可以替换的实现这个功能。步骤为:
- 下载并安装 SIMBL
- 下载 inputswitcher , 并解压
- InputSwitcher.app → /Applications
- InputSwitcherClient.bundle → /Library/Application Support/SIMBL/Plugins
- 启动InputSwitcher.app,并重启其它应用程序,就可以为不同的应用程序窗口保留输入法状态了。
参考:http://limechat.net/inputswitcher/
ruby on rails dictionary for macosx
Posted by devon on February 8th, 2009 filed in PluginComment now »
在Dictionary中搜索API。
使用方法:
- 下载文档
- 解压至~/Library/Dictionaries/ 或 /Library/Dictionaries/
- 打开Dictionary → Preferences, 选中ruby, 并拖至最顶点,这样,就可以spotlight来搜索API了。
Satellite: a self-syncing distributed wiki
Posted by HoLin on January 22nd, 2009 filed in Ruby应用Comment now »
介绍
satellite is a self-syncing distributed wiki with file uploads and all sorts of other useful features like offline editing.
主要的特性有:
- textile的wiki语法
- 支持文件上传
- 所有文档基于git存储与管理
- 离线编辑,并可自动同步到服务器
- 支持代码高亮
- 全面快捷键支持
经我们测试,用于个人知识管理,非常棒。
安装
- 安装 Git! (and Ruby)
- 获取代码,原始代码在”这里”:http://github.com/kenpratt/satellite/tree/master ,我们fork出了一个版本(http://github.com/holin/satellite/tree/master),根据中文环境和自己的实际需求增加了一些功能,具体看 satellit扩展功能。
1 | $ git clone git@github.com:holin/satellite.git satellite |
- 安装gems, {color:red}注意 ,rack要求使用0.4版本(其它版本未完整测试,最新的0.9rack不能用)
1 2 3 4 | $ sudo gem install rack mongrel metaid erubis RedCloth coderay $ cd path/to/satellite $ git submodule init $ git submodule update |
- 配置应用,下方其他中有公开git repository申请说明
1 | cd path/to/satellite |
- edit conf/production.rb
- production.rb example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # production configuration # URI of master git repository for wiki content config.master_repository_uri = 'git+ssh://repo.or.cz/srv/git/pkmh.git' # user information to use for git content submissions config.user_name = 'holin' config.user_email = 'holin@example.com' # logging level (:error, :warn, :info, :debug) config.log_level = :warn # automatically reload app when app files change? (for development) config.auto_reload = true |
- 启动server
1 2 3 | $ bin/start_satellite ** Starting Satellite_2 ** Satellite_2 is now running at http://0.0.0.0:4000/ |
- 访问http://localhost:4000/
配置文件,initialize中的配置都可以在production.rb里面通过config.xxx = ??? 来配置
- lib/configration.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | def initialize # defaults values self.app_name = 'Satellite' self.server_ip = '0.0.0.0' self.server_port = 7000 self.master_repository_uri = '' self.user_name = '' self.user_email = '' self.sync_frequency = 60 self.app_dir = File.join(File.dirname(File.expand_path(__FILE__)), '../') self.conf_dir = File.join(app_dir, 'conf') self.template_dir = File.join(app_dir, 'templates') self.static_dir = File.join(app_dir, 'static') self.log_dir = File.join(app_dir, 'log') self.data_dir = File.join(app_dir, 'data') self.log_level = :info self.log_file_name = 'app.log' self.auto_reload = false self.prettify_exceptions = true self.max_upload_filesize = 200 self.authentication = false self.authenticator = nil end |
Mac下配置开机启动
- 下载 Lingon
- 写启动server脚本satellite.sh
1 2 3 4 5 | #!/bin/sh export PATH=/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:/Applications/:$PATH cd /Users/devon/wiki && bin/start_satellite |
- 运行Lingon,配置User Deamon
- 注销,并重新登录。测试是否正确配置
其他
- 申请 repo.or.cz 的git服务
- GitHosting
shoulda on rails
Posted by HoLin on January 7th, 2009 filed in Rails应用, 敏捷开发, 测试方法2 Comments »
在新项目中配置shoulda
1 2 3 4 5 6 7 | rails shoulda_demo -d mysql cd shoulda_demo/ script/plugin install git://github.com/thoughtbot/shoulda.git sudo gem install thoughtbot-factory_girl --source http://gems.github.com script/plugin install git://github.com/technicalpickles/factory_girl_on_rails.git script/plugin install git://github.com/hardbap/coulda.git |
测试model
生成model
1 | script/generate coulda_model subject |
写测试代码,编辑文件 test/unit/subject_test.rb
1 2 3 4 5 6 | require File.dirname(__FILE__) + '/../test_helper' class SubjectTest < ActiveSupport::TestCase should_have_many :questions should_require_attributes :name end |
运行测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | HoLin:tiku holin$ rake test (in /Users/holin/work/kuxuesoft/tiku) /usr/local/bin/ruby -Ilib:test "/usr/local/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader.rb" "test/unit/subject_test.rb" "test/unit/user_test.rb" Loaded suite /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader Started FF............. Finished in 0.301899 seconds. 1) Failure: test: Subject should have many questions. (SubjectTest) ...: Subject does not have any relationship to questions. <nil> is not true. 2) Failure: test: Subject should require name to be set. (SubjectTest) ...: Subject allowed nil as a value for name. <false> is not true. 15 tests, 28 assertions, 2 failures, 0 errors /usr/local/bin/ruby -Ilib:test "/usr/local/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader.rb" "test/functional/home_controller_test.rb" "test/functional/sessions_controller_test.rb" "test/functional/users_controller_test.rb" Loaded suite /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader Started ............... Finished in 0.434793 seconds. 15 tests, 27 assertions, 0 failures, 0 errors /usr/local/bin/ruby -Ilib:test "/usr/local/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader.rb" Errors running test:units! |
出错,编辑文件 app/models/subject.rb 来让测试通过
1 2 3 4 | class Subject < ActiveRecord::Base has_many :questions validates_presence_of :name end |
再次运行测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | HoLin:tiku holin$ rake test (in /Users/holin/work/kuxuesoft/tiku) /usr/local/bin/ruby -Ilib:test "/usr/local/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader.rb" "test/unit/subject_test.rb" "test/unit/user_test.rb" Loaded suite /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader Started E.............. Finished in 0.333493 seconds. 1) Error: test: Subject should have many questions. (SubjectTest): NameError: uninitialized constant Question ... 15 tests, 31 assertions, 0 failures, 1 errors /usr/local/bin/ruby -Ilib:test "/usr/local/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader.rb" "test/functional/home_controller_test.rb" "test/functional/sessions_controller_test.rb" "test/functional/users_controller_test.rb" Loaded suite /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader Started ............... Finished in 0.460992 seconds. 15 tests, 27 assertions, 0 failures, 0 errors /usr/local/bin/ruby -Ilib:test "/usr/local/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader.rb" Errors running test:units! |
还是通不过,新建question model
1 2 3 4 5 6 7 8 9 | HoLin:tiku holin$ script/generate coulda_model question exists app/models/ exists test/unit/ exists test/factories/ create app/models/question.rb create test/unit/question_test.rb create test/factories/question_factory.rb exists db/migrate create db/migrate/20090107064242_create_questions.rb |
运行测试
1 2 3 4 5 | HoLin:tiku holin$ rake test (in /Users/holin/work/kuxuesoft/tiku) You have 1 pending migrations: 20090107064242 CreateQuestions Run "rake db:migrate" to update your database then try again. |
需要先完成所有的Migration,那就完成他们吧。
1 2 3 4 5 6 | HoLin:tiku holin$ rake db:migrate (in /Users/holin/work/kuxuesoft/tiku) == CreateQuestions: migrating ================================================ -- create_table(:questions) -> 0.0347s == CreateQuestions: migrated (0.0351s) ======================================= |
再运行测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | HoLin:tiku holin$ rake test (in /Users/holin/work/kuxuesoft/tiku) /usr/local/bin/ruby -Ilib:test "/usr/local/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader.rb" "test/unit/question_test.rb" "test/unit/subject_test.rb" "test/unit/user_test.rb" Loaded suite /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader Started ............... Finished in 0.323642 seconds. 15 tests, 32 assertions, 0 failures, 0 errors /usr/local/bin/ruby -Ilib:test "/usr/local/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader.rb" "test/functional/home_controller_test.rb" "test/functional/sessions_controller_test.rb" "test/functional/users_controller_test.rb" Loaded suite /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader Started ............... Finished in 0.438684 seconds. 15 tests, 27 assertions, 0 failures, 0 errors /usr/local/bin/ruby -Ilib:test "/usr/local/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader.rb" |
通过测试
测试controller
生成controller
1 2 3 4 5 6 7 8 | HoLin:tiku holin$ script/generate controller subjects exists app/controllers/ exists app/helpers/ create app/views/subjects exists test/functional/ create app/controllers/subjects_controller.rb create test/functional/subjects_controller_test.rb create app/helpers/subjects_helper.rb |
编写测试代码,编辑文件test/functional/subjects_controller_test.rb
1 2 3 4 5 6 7 8 9 10 | require 'test_helper' class SubjectsControllerTest < ActionController::TestCase context "on POST to :create" do setup { post :create, :subject => {:name => 'CET-6', :desc => 'description goes here' } } should_assign_to :subject should_redirect_to "subject_url(@subject)" end end |
运行测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | HoLin:tiku holin$ rake test:functionals (in /Users/holin/work/kuxuesoft/tiku) /usr/local/bin/ruby -Ilib:test "/usr/local/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader.rb" "test/functional/home_controller_test.rb" "test/functional/sessions_controller_test.rb" "test/functional/subjects_controller_test.rb" "test/functional/users_controller_test.rb" Loaded suite /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader Started ..........FE..... Finished in 0.603312 seconds. 1) Failure: test: on POST to :create should assign @subject. (SubjectsControllerTest) [...]: The action isn't assigning to @subject. <nil> expected to not be nil. 2) Error: test: on POST to :create should redirect to "subject_url(@subject)". (SubjectsControllerTest): NoMethodError: undefined method `subject_url' for #<SubjectsControllerTest:0x227f428> ... 17 tests, 28 assertions, 1 failures, 1 errors rake aborted! Command failed with status (1): [/usr/local/bin/ruby -Ilib:test "/usr/local...] (See full trace by running task with --trace) |
添加routes
1 | map.resources :subjects |
运行测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | HoLin:tiku holin$ rake test:functionals (in /Users/holin/work/kuxuesoft/tiku) /usr/local/bin/ruby -Ilib:test "/usr/local/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader.rb" "test/functional/home_controller_test.rb" "test/functional/sessions_controller_test.rb" "test/functional/subjects_controller_test.rb" "test/functional/users_controller_test.rb" Loaded suite /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader Started ..........FE..... Finished in 0.536594 seconds. 1) Failure: test: on POST to :create should assign @subject. (SubjectsControllerTest) [...]: The action isn't assigning to @subject. <nil> expected to not be nil. 2) Error: test: on POST to :create should redirect to "subject_url(@subject)". (SubjectsControllerTest): ActionController::RoutingError: subject_url failed to generate from {:controller=>"subjects", :action=>"show", :id=>nil}, expected: {:controller=>"subjects", :action=>"show"}, diff: {:id=>nil} ... 17 tests, 28 assertions, 1 failures, 1 errors rake aborted! Command failed with status (1): [/usr/local/bin/ruby -Ilib:test "/usr/local...] (See full trace by running task with --trace) |
编辑app/controllers/subjects_controller.rb, 增加create action
1 2 3 4 5 6 7 8 9 10 11 12 13 | class SubjectsController < ApplicationController def create @subject = Subject.new(params[:subject]) if @subject.valid? && @subject.save flash[:message] = "添加成功" redirect_to subject_url(@subject) else render :action => 'new' end end end |
运行测试
1 2 3 4 5 6 7 8 9 | HoLin:tiku holin$ rake test:functionals (in /Users/holin/work/kuxuesoft/tiku) /usr/local/bin/ruby -Ilib:test "/usr/local/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader.rb" "test/functional/home_controller_test.rb" "test/functional/sessions_controller_test.rb" "test/functional/subjects_controller_test.rb" "test/functional/users_controller_test.rb" Loaded suite /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader Started ................. Finished in 0.687698 seconds. 17 tests, 29 assertions, 0 failures, 0 errors |
测试通过
测试需要登陆的操作、嵌套context
编写测试代码,编辑文件test/functional/subjects_controller_test.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | require 'test_helper' class SubjectsControllerTest < ActionController::TestCase context "do these after logged in" do setup { @request.session[:user_id] = User.first.id } context "on POST to :create" do setup { post :create, :subject => {:name => 'CET-6', :desc => 'description goes here' } } should_assign_to :subject should_redirect_to "subject_url(@subject)" end context "on POST to :create without subject name" do setup { post :create, :subject => {:desc => 'description goes here' } } should_assign_to :subject should_redirect_to "new_subject_url" end end end |
运行测试
1 2 3 4 5 6 7 8 9 | HoLin:tiku holin$ rake test:functionals (in /Users/holin/work/kuxuesoft/tiku) /usr/local/bin/ruby -Ilib:test "/usr/local/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader.rb" "test/functional/home_controller_test.rb" "test/functional/sessions_controller_test.rb" "test/functional/subjects_controller_test.rb" "test/functional/users_controller_test.rb" Loaded suite /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader Started ................... Finished in 0.572731 seconds. 19 tests, 31 assertions, 0 failures, 0 errors |
参考资源
Git服务器安装
Posted by devon on January 6th, 2009 filed in 源代码管理Comment now »
Git on Ubuntu Server
安装Git-Core:
1 2 3 4 | sudo apt-get update # 可选步骤 sudo apt-get dist-upgrade # 可选步骤 sudo apt-get install git-core |
因为要用到 Gitosis ,所有,需要安装python setuptools
1 | sudo apt-get install python-setuptools |
安装 Gitosis
1 2 3 4 5 6 | mkdir ~/src cd ~/src git clone git://eagain.net/gitosis cd gitosis sudo python setup.py install |
增加名为Git的用户
1 | sudo adduser --system --shell /bin/sh --gecos 'git version control' --group --disabled-password --home /home/git git |
上传公钥到USER用户的根目录下(如果没有,用 ssh-keygen -t rsa 生成)
1 2 3 | scp .ssh/id_rsa.pub USER@YOUR_SERVER: sudo -H -u git gitosis-init < /home/USER/id_rsa.pub sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update |
到这一步,基本上都安装好了,到本地进行测试:
1 | git clone git@YOUR_SERVER:gitosis-admin.git |
成功后,在本地将有一个gitosis-admin目录,里面有gitosis.conf,keydir。
为Rails项目配置git
打开gitosis.conf,增加一块内容,members为某个用户的公钥~/.ssh/id_rsa.pub中的名字(在该文件的最后在)
1 2 3 | [group myrailsapp] members = vince@urbanpuddle writable = myrailsapp |
然后,提交修改
1 2 | git commit -a -m "created a new repository" git push |
将本地代码提交到git中
1 2 | cd myrailsapp git init |
创建 .gitignore 文件,用于忽略某些不需要进行代码管理的内容
1 2 3 4 5 | .DS_Store log/*.log tmp/**/* config/database.yml db/*.sqlite3 |
提交代码
1 2 3 4 | git remote add origin git@YOUR_SERVER:myrailsapp.git git add . git commit -a -m "initial import" git push origin master:refs/heads/master |
接下来,可以增加成员的公钥到系统中了
1 2 3 4 | cd gitosis-admin cp ~/alice.pub keydir/ cp ~/bob.pub keydir/ git add keydir/alice.pub keydir/bob.pub |
修改gitosis.conf
1 2 3 4 | [group myteam] - members = jdoe + members = jdoe alice bob writable = free_monkey |
提交修改
1 2 | git commit -a -m "Granted Alice and Bob commit rights to FreeMonkey" git push |
其它成员就可以获取代码了
1 | git clone git@YOUR_SERVER:myrailsapp.git |
请参考 Hosting Git repositories, The Easy (and Secure) Way
原文请参考 : http://enjoyrails.com/wikis/Git安装
Rails中检测SWF尺寸
Posted by devon on January 5th, 2009 filed in Rails应用Comment now »
安装:
1 2 | cd vendor/plugins svn export http://ruby-imagespec.googlecode.com/svn/trunk/ image_spec |
使用:
1 2 3 4 | image = ImageSpec::Dimensions.new('/path/to/your/file') image.width image.height |
例子:
1 2 3 4 5 6 | >> image = ImageSpec::Dimensions.new("#{RAILS_ROOT}/a.swf") => #<ImageSpec::Dimensions:0x2570d94 @height=670, @width=868> >> image.width => 868 >> image.height => 670 |
页面调用flash文件之路径问题(IE)
Posted by wengjian on January 4th, 2009 filed in web前端技术Comment now »
今天发现一个很诡异的问题 :
页面调用一个swf文件(该文件在kecheng.example.net/courses 这个目录下),该swf文件内部as调用其他的swf文件(文件在其他的域名目录下,跟页面调用的那个swf文件不在同目录下),在ie下 第一次可以调用 刷新后无法调用。
(页面地址:http://kecheng.example.net/courses/flash_s/4)
调用代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 | function show_flash(swf_url) { var so = new SWFObject(swf_url,'aa','710','532','8','#ffffff'); so.addParam('allowscriptaccess','always'); so.addParam('wmode','transparent'); var base_url = swf_url.replace(/\/[^/]*$/, '/') so.addParam('base', base_url); so.addParam('allowfullscreen','true'); so.addVariable('width','710'); so.addVariable('height','532'); so.write('flash_viewer'); } show_flash(''); |
查询adobe网站查到 有base这个属性 (官网地址)
base - . or [base directory] or [URL]. Specifies the base directory or URL used to resolve all relative path statements in the Flash Player movie. This attribute is helpful when your Flash Player movies are kept in a different directory from your other files.
这个属性可以指定as调用swf文件的相对路径的路径基准.
例如: a.swf文件处于 www.aa.com/kecheng 下,b1.swf、b2.swf 2个文件处于www.bb.com/kecheng 下其中b1.swf文件as代码调用b2.swf文件 。在www.aa.com/kecheng下的a.swf文件调用b1.swf文件 ,如果不加base这个属性的话 b1.swf是调用不到b2.swf这个文件的(因为b2.swf文件的路径已经变成www.aa.com/kecheng 了) 加上属性 就可以指定其相对路径的基准是www.bb.com/kecheng 这样就可以调用到b2.swf文件了。
但是在IE6.7下刷新页面后b2.swf文件就调用不到了 使用iewatch 发现页面刷新后b2.swf的路径已经变成www.aa.com/kecheng了,base属性在ie下失效了,但是删除ie临时文件又可以了,然后刷新又不可以了。
通过iewatch 观察后,发现可能是ie缓存的问题 ,就在调用地址上加了上一个随机数字
1 | show_flash('?'+ Math.random()); |
问题解决。
此问题非常诡异,虽然解决了,但是更深层次的原因还是没弄明白,望哪位高手解释下!
Git一分钟教程
Posted by devon on December 31st, 2008 filed in 源代码管理Comment now »
流程:取代码 → 每次工作前更新代码到最新版本 → 修改代码 → 提交代码到服务器
取代码及修改全局设置
设置用户名与邮箱
1 2 | git config --global user.name "My Name" git config --global user.email "my@email.com" |
从已有的git库中提取代码
1 | git clone git@server:app.git myrepo |
每次更改代码的操作
更新本地代码到最新版本(需要merge才能合到本地代码中)
1 | git fetch |
合并更新后的代码到本地
1 | git merge |
更新代码方式的另一种方法(git pull是git fetch和git merge命令的一个组合)
1 | git pull |
修改代码后,查看已修改的内容
1 | git diff --cached |
将新增加文件加入到git中
1 | git add file1 file2 file3 |
从git中删除文件
1 2 | git rm file1
git rm -r dir1 |
提交修改
1 | git commit -m 'this is memo' |
如果想省掉提交之前的 git add 命令,可以直接用
1 | git commit -a -m 'this is memo' |
commit和commit -a的区别, commit -a相当于:
- 第一步:自动地add所有改动的代码,使得所有的开发代码都列于index file中
- 第二步:自动地删除那些在index file中但不在工作树中的文件
- 第三步:执行commit命令来提交
提交所有修改到远程服务器,这样,其它团队成员才能更新到这些修改
1 | git push |
其它常用命令
显示commit日志
1 | git log |
不仅显示commit日志,而且同时显示每次commit的代码改变。
1 | git log -p |
回滚代码:
1 | git revert HEAD |
你也可以revert更早的commit,例如:
1 | git revert HEAD^ |
将branchname分支合并到当前分支中。(如果合并发生冲突,需要自己解决冲突)
1 | git merge branchname |
解决冲突
当merge命令自身无法解决冲突的时候,它会将工作树置于一种特殊的状态,并且给用户提供冲突信息,以期用户可以自己解决这些问题。当然在这个时候,未发生冲突的代码已经被git merge登记在了index file里了。如果你这个时候使用git diff,显示出来的只是发生冲突的代码信息。
在你解决了冲突之前,发生冲突的文件会一直在index file中被标记出来。这个时候,如果你使用git commit提交的话,git会提示:filename.txt needs merge
在发生冲突的时候,如果你使用git status命令,那么会显示出发生冲突的具体信息。
在你解决了冲突之后,你可以使用如下步骤来提交:
第一步(如果需要增加文件):
1 | git add file1 |
第二步:
1 | git commit |