by agate - Published: 2009-01-10 [11:20 下午] - Category: 程序编码

一直以来都是简单地使用 w3c 的 dom 模式的 javascript 编程模式. 直到最近才开始使用 jquery. 也是由此发现其的强大! 在这里感叹一下: "这东西他妈太好了! 不过开始有依赖性了!!!"

言归正传, 在开发的过程中发现了一个小特点, 需要注意一下: 就是 jquery 的事件绑定机制是累加式的, 说白了就是可以重复注册事件的处理方式, 并在事件触发的时候统统执行. 明显, 这个是有好处的. 我们担心不必在大型前端的 javascript 脚本中覆盖我们原先的事件注册. 但是常常我们也遇到一个事件多次被执行的问题(其实就是某些情况下我们的时间注册了多次.)

在 dom scripting 中我们常常这么注册事件:
HTML:
<p id="clickable">click me!<p>
JAVASCRIPT:
document.getElementById("clickable").onclick = function () { alert(1); };
document.getElementById("clickable").onclick = function () { alert(2); };

测试点击这个段落, 只会有一次 alert 并且内容为 2 (即最后一次注册的);

但是在 jquery 中我们这样:
HTML:
<p id="clickable">click me!<p>
JAVASCRIPT:
$('#clickable').onclick(function () { alert(1); });
$('#clickable').onclick(function () { alert(2); });

测试点击这个段落, 两次 alert 都会出现.

所以如果需要只有一个事件绑定的话可以使用 jquery 自带的 unbind 方法来解除指定时间的所有绑定执行代码. 例如:
$('#clickable').unbind('onclick');
这样就解除了 onclick 的所有绑定方法.
(ps. jquery 中 jqObj.event(function) 相当于 jqObj.bind('event', function))

这个问题在开发中需要注意!

Tags: [ , ] - Comments: Comments
by agate - Published: 2009-01-10 [4:32 下午] - Category: 程序编码

最近项目中使用了 sphinx 作为数据库的全文搜索引擎. 加之使用的是 ror 开发组合, 固然使用到了比较流行的 ultra sphinx plugin. 觉得十分易用就在这里记录一下使用的大致方式(就一 helloworld).

1. 当然是下载安装 sphinx.
可以到 http://www.sphinxsearch.com/downloads.html 网站下载最新的源码编译安装.
(ps 如果你要加入中文分词的支持就要安装 libmmseg. 编译前需要打个补丁. 或者直接使用作者打好补丁的进行编译安装. 具体的方式可以 google 一下)

2. 安装 rails 的 sphinx 插件 "ultra sphinx"
安装依赖 gem
$sudo gem install chronic
进入你的 rails 应用目录中
$./script/plugin install git://github.com/fauna/ultrasphinx.git

3. 开始使用.
其实具体的还是查阅官方 doc 比较好. 比较全面一些!
这里还是为了回顾方便, helloworld 来也!

第一步 [准备准备]
$rails sphinx -d mysql
$cd sphinx
$./script/plugin install git://github.com/fauna/ultrasphinx.git
$./script/generate scaffold post title:string body:text
$rake db:create:all
$rake db:migrate

(这些只是大步骤, 具体的什么数据库用户名密码设置这类的自己补上就是了. 还有, 目前 ultrasphinx 仅仅支持 mysql 和 PostgreSQL)

第二步 [声明 model 为 searchable]
编辑 [rails_root]/app/models/post.rb, 内容如下:

class Post < ActiveRecord::Base
  is_indexed :fields => ['created_at', 'title', 'body']
end

第三步 [配置/索引/启动]
首先复制配置文件的模板到 config/ultrasphinx 下.
$mkdir config/ultrasphinx
$cp vendor/plugins/ultrasphinx/examples/default.base config/ultrasphinx/

修改 default.base 中的 path 为这个 rails 工程的绝对地址

吧 <% path = "/opt/local/var/db/sphinx/" %>
改成 <% path = "/home/[你]/....." %>

$rake ultrasphinx:configure
$rake ultrasphinx:index
$rake ultrasphinx:daemon:start

(第一次执行时候,顺序不能颠倒!)

第四步 [添加点数据试试看]
添加数据我就不说了, 自己启动服务器到对应页面 new 几个出来. 然后重新索引 sphinx. 然后开启 rails 的 console:
$./script/console
>>@query = '自己写吧'
>>@search = Ultrasphinx::Search.new(:query => @query)
>>@search.run
>>@search.results