ruby gem怎么识别封装下的控件

ruby中下拉框select无法把选择的值插入到数据库,该怎么解决 - Ruby/Rails栏目()
ruby中下拉框select无法把选择的值插入到数据库,该怎么解决
&&&整理于: 19:33&&&阅读:次
&select name=&post[hold_reason]&& &
&option value=&shiyong& selected=&selected&&使用&/option& &
&option value=&weixiu&&维修&/option&&/select&ruby中下拉框这么写对吧,为什么保存以后不能把值插入到数据库中呢?-----参考解决方法-------探讨&select name=&hold_reason&&
-----参考解决方法-------提交后,你接收就可以了,
-----参考解决方法-------&select name=&post[hold_reason]&&对RUBY来说,前台这样写没问题,你需要看的是后台的代码.
开发者笔记
软件开发/管理/测试
企业管理/开发
嵌入式开发
高性能开发
编程语言/框架
专题项目/开发/技术
Linux/Unix1598人阅读
[ 源代码下载:&]
Introduction
这里,我将介绍在对话框中使用ActiveX控件的ATL支持。由于ATL专业处理ActiveX控件,因此WTL不涉及其他辅助类。不过,使用ActiveX控件的ATL方法与MFC有很大的不同,所以需要重点介绍。我将介绍如何使用一个ActiveX控件并处理事件,开发一个程序(与MFC类向导生成的程序相比不丢失功能)。
本章的例子演示如何使用IE浏览器控件,选择浏览器控件有两个好处:
1)每台计算机上都有这个控件
2)它有很多方法和事件处理,是个做演示的好例子
我当然无法与那些花了大量的时间编写基于浏览器控件的定制浏览器的人相比,但是,通过本篇文章,你就知道如何开始自己编写定制的浏览器。
Starting with the AppWizard
Creating the project
WTL程序创建向导可以创建一个包含ActiveX控件的程序。我们创建一个IEHoster的新工程,并使用非模态对话框形式。
The generated code
这节,我们将见到有向导生成的没见过的新代码。下一节将介绍ActiveX包容类的细节。
首先检查的是stdafx.h文件,
#include &atlbase.h&
#include &atlapp.h&
extern CAppModule _M
#include &atlcom.h&
#include &atlhost.h&
#include &atlwin.h&
#include &atlctl.h&
// .. other WTL headers ...
atlcom.h 和 atlhost.h是很重要的。它们含有一些COM相关类的定义(比如智能指针CComPtr),还有用来包容控件的窗口类。
下面,查看maindlg.h中的CMainDlg类:
class CMainDlg : public CAxDialogImpl&CMainDlg&,
public CUpdateUI&CMainDlg&,
public CMessageFilter, public CIdleHandler
现在,CMainDlg派生于CAxDialogImpl,这是使对话框支持包容ActiveX控件的第一步。
最后在程序入口函数WinMain()中添加一行新代码:
int WINAPI _tWinMain(...)
_Module.Init(NULL, hInstance);
AtlAxWinInit();
int nRet = Run(lpstrCmdLine, nCmdShow);
_Module.Term();
AtlAxWinInit()注册了一个类名为AtlAxWin的窗口类,ATL用它创建ActiveX控件的包容窗口。
由于ATL7的一些改变,需要在_Module.Init()的参数中添加LIBID,论坛中的一些人建议使用下面的代码:
_Module.Init(NULL, hInstance, &LIBID_ATLLib);
Adding Controls with the Resource Editor
和MFC的程序一样,ATL也可以使用资源编辑器向对话框添加控件。首先,在对话框编辑器上点击鼠标右键,在弹出的菜单中选择“Insert ActiveX control”:
VC将会显示系统中安装的控件类表,滚动列表选择“Microsoft Web Browser”,查看控件的属性,将ID设为IDC_IE。资源编辑器中对话框中的控件显示应该是这个样子的:
如果现在编译运行程序,你会看到对话框中的浏览器控件,它将显示一个空白页,因为我们还没有告诉它打开哪个网页。
在下一节,我将介绍与创建和包容ActiveX控件有关的ATL类,同时我们也会明白这些类是如何与浏览器交换信息的。
ATL Classes for Control Hosting
当在对话框中包容ActiveX控件,需要CAxDialogImpl 和 CAxWindow这两个类协同工作。它们提供了所有控件容器必须实现的接口方法,提供通用的功能函数,例如查询控件的某个特殊的COM接口。
CAxDialogImpl
第一个类是CAxDialogImpl,要使你的对话框能够包容ActiveX控件就必须从CAxDialogImpl派生。CAxDialogImpl类重载了Create()和DoModal()函数,这两个函数分别被全局函数AtlAxCreateDialog()和AtlAxDialogBox()调用。既然IEHoster对话框是由Create()创建的,我们看看AtlAxCreateDialog()到底做了什么工作。
AtlAxCreateDialog()装载对话框资源,并使用辅助类_DialogSplitHelper遍历对话框的所有控件,查找由资源编辑器创建的特殊条目,这些特殊条目就表示这是一个ActiveX控件。例如,下面是IEHoster.rc文件中浏览器控件的入口:
CONTROL &&,IDC_IE,&{A-11D0-A96B-00C04FD705A2}&,
WS_TABSTOP,7,7,116,85
第一个参数是窗口文字(空字符串),第二个是控件的ID,第三个是窗口的类名。_DialogSplitHelper::SplitDialogTemplate()函数找到以'{'开始的窗口类名时就知道这是一个表示ActiveX控件的条目。它在内存中创建了一个临时对话框模板,在这个新模板中这些特殊的控件条目被创建的AtlAxWin窗口对应项代替,新的入口是在内存中的等价体:
CONTROL &{A-11D0-A96B-00C04FD705A2}&,
IDC_IE, &AtlAxWin&, WS_TABSTOP, 7, 7, 116, 85
结果就是创建了一个具有相同ID的AtlAxWin窗口,窗口的标题是ActiveX控件的GUID。所以你调用GetDlgItem(IDC_IE)返回的值是AtlAxWin窗口的句柄而不是ActiveX控件本身。
SplitDialogTemplate()函数完成工作后,AtlAxCreateDialog()接着调用CreateDialogIndirectParam()函数使用修改后的模板创建对话框。
AtlAxWin and CAxWindow
如上面所述,AtlAxWin实际上是ActiveX控件的宿主窗口,AtlAxWin还会用到一个特殊的窗口接口类:CAxWindow。当AtlAxWin从模板创建一个对话框后,AtlAxWin执行窗口处理AtlAxWindowProc(),就会处理WM_CREATE消息并创建相应的ActiveX控件。ActiveX控件还可以在运行其间动态创建,不需要对话框模板,我会在后面介绍这种方法。
WM_CREATE的消息处理函数调用全局函数AtlAxCreateControl(),将AtlAxWin窗口的窗口文本作为参数传递给该函数,那实际就是浏览器控件的GUID。AtlAxCreateControl()有会调用一堆其他函数,不过最终会用到CreateNormalizedObject()函数,这个函数将窗口文本转换成GUID,并最终调用CoCreateInstance()创建ActiveX控件。
由于ActiveX控件是AtlAxWin的子窗口,所以对话框不能直接访问控件,当然CAxWindow提供了这些方法通控件通信,最常用的一个是QueryControl(),这个方法调用控件的QueryInterface()方法。例如,你可以使用QueryControl()从浏览器控件得到IWebBrowser2接口,然后使用这个接口将浏览指定的URL。
Calling the Methods of a Control
因为我们的对话框有一个浏览器控件,我们可以使用COM接口与之交互。我们做得第一件事情就是使用IWebBrowser2接口将其导航到一个新URL处。在OnInitDialog()函数中,我们将一个CAxWindow变量与包容控件的AtlAxWin类关联起来。
BOOL CMainDlg::OnInitDialog()
CAxWindow wndIE = GetDlgItem(IDC_IE);
然后声明一个IWebBrowser2的接口指针并获得浏览器控件的这个接口,使用CAxWindow::QueryControl():
CComPtr&IWebBrowser2& pWB2;
hr = wndIE.QueryControl ( &pWB2 );
QueryControl()调用浏览器控件的QueryInterface()方法,如果成功就会返回IWebBrowser2接口,我们可以调用Navigate():
QueryControl()调用浏览器控件的QueryInterface()方法,如果成功就会返回IWebBrowser2接口,我们可以调用Navigate():
if ( pWB2 )
// empty variant
pWB2-&Navigate ( CComBSTR(&/&),
&v, &v, &v, &v );
Sinking Events Fired by a Control
从浏览器控件得到接口非常简单,通过它可以与控件单向通信。通常控件也会以事件的形式与外界通信,ATL有专用的类包装连接点和事件响应,所以我们可以从控件接收到这些事件。为使用对事件的支持需要做四件事:
1)CMainDlg类的继承列表中添加IDispEventImpl
2)填写事件映射链,它指示哪些事件需要处理
3)编写事件响应函数
4)关联控件和事件映射链(advising)
VC IDE 可以帮助我们改变CMainDlg,不仅排序显示ActiveX控件类型列表,还可显示控件事件列表。可以帮助我们添加事件的处理,本文中只介绍VC7中添加事件处理的方法。
Adding handlers in VC 7
这里有两种方法添加事件处理。可以在对话框编辑器中右击鼠标,选择“Add Event Handler ”,弹出一个对话框用于选择事件并命名事件处理函数。
另一种方法是查看CMainDlg的属性页,展开控件节点,在对应浏览器控件ID下,可以添加事件的处理
Advising for events
最后一步,通知(advise)控件CMainDlg想要接受的浏览器控件触发的消息。advising 发生在0OnInitDialog(), unadvising 发生在OnDestroy().
Advising in VC 6
VC6中,ATL的全局函数AtlAdviseSinkMap()通知(advise)对话框中所有控件开始或终止发送事件到C++对象。这个该函数的第一个参数是一个指向拥有事件映射链的C++对象指针(通常是this),第二个参数是一个bool变量,如果为true表示这个对象开始接收事件,否则表示终止接收事件。要使用这个函数,需要处理WM_INITDIALOG 和WM_DESTROY消息,并调用如下:
BOOL CMainDlg::OnInitDialog(...)
// Begin sinking events
AtlAdviseSinkMap ( this, true );
void CMainDlg::OnDestroy()
// Stop sinking events
AtlAdviseSinkMap ( this, false );
AtlAdviseSinkMap()返回一个HRESULT,表示函数执行是否成功。如果OnInitDialog()中AtlAdviseSinkMap()执行失败,那么就会无法接收一些(或所有)ActiveX控件的事件。
Advising in VC 7
VC7中,CAxDialogImpl 提供了一个封装AtlAdviseSinkMap()的方法:AdviseSinkMap()。AdviseSinkMap()只有一个bool型参数,它与AtlAdviseSinkMap()的第二个参数意义相同。AdviseSinkMap() 检查拥有事件映射表的类,并调用AtlAdviseSinkMap()。
与VC6不同的是CAxDialogImpl已经处理了消息WM_INITDIALOG 和 WM_DESTROY,并调用了AdviseSinkMap(),因此只需在CMainDlg的消息映射表的开始部分添加宏CHAIN_MSG_MAP。
BEGIN_MSG_MAP(CMainDlg)
CHAIN_MSG_MAP(CAxDialogImpl&CMainDlg&)
// rest of the message map...
END_MSG_MAP()
Overview of the Sample Project
现在,我们已经知道消息映射如何工作,我们的IEHost项目,包容一个浏览器控件,处理六个事件:
1)BeforeNavigate2 和 NavigateComplete2:这些事件让程序可以控制URL的导航,如果你响应了BeforeNavigate2事件,你可以在事件的处理函数中取消导航
2)DownloadBegin 和 DownloadComplete::程序使用这些事件控制“wait”消息,这表示浏览器正在工作。一个更优美的程序会像IE一样在此期间使用一段动画。
3)CommandStateChange:这个事件告诉程序向前和向后导航命令何时可用,应用程序将相应的按钮变为可用或不可用。
4)StatusTextChange:这个事件会在几种情况下触发,例如鼠标移到一个超链接上。这个事件发送一个字符串,应用程序响应这个事件,将这个字符串显示在浏览器窗口下的静态控件上。
程序有四个按钮控制浏览器工作:向后,向前,停止和刷新,它们分别调用IWebBrowser2相应的方法。
事件和伴随事件发送的数据都被记录在列表控件中,你可以看到事件的触发,你还可以关闭一些事件记录而仅仅观察其中的一辆个事件。为了演示事件处理的重要作用,我们在BeforeNavigate2事件处理函数中检查URL,如果发现“doubleclick.net”就取消导航。广告和弹出窗口过滤器等一些IE的插件使用的就是这个方法而不是HTTP代理,下面就是做这些检查的代码。
void __stdcall CMainDlg::OnBeforeNavigate2 (
IDispatch* pDisp, VARIANT* URL, VARIANT* Flags,
VARIANT* TargetFrameName, VARIANT* PostData,
VARIANT* Headers, VARIANT_BOOL* Cancel )
CString sURL = URL-&bstrV
// You can set *Cancel to VARIANT_TRUE to stop the
// navigation from happening. For example, to stop
// navigates to evil tracking companies like doubleclick.net:
if ( sURL.Find ( _T(&doubleclick.net&) ) & 0 )
*Cancel = VARIANT_TRUE;
下面就是我们的程序工作起来的样子:
下面就是我们的程序工作起来的样子:
IEHoster还使用了前几章介绍过得类:CBitmapButton(用于浏览器控制按钮),CListViewCtrl(用于事件记录),DDX (跟踪checkbox的状态)和CDialogResize。
Creating an ActiveX Control at Run Time
除了使用资源编辑器,还可以在运行其间动态创建ActiveX控件。About对话框演示了这种技术。对话框编辑器预先放置了一个group box用于浏览器控件的定位:
在OnInitDialog()函数中我们使用 CAxWindow创建了一个新AtlAxWin,它定位于我们预先放置好的group box的位置上(这个group box随后被销毁):
LRESULT CAboutDlg::OnInitDialog(...)
CWindow wndPlaceholder = GetDlgItem ( IDC_IE_PLACEHOLDER );
CAxWindow wndIE;
// Get the rect of the placeholder group box, then destroy
// that window because we don't need it anymore.
wndPlaceholder.GetWindowRect ( rc );
ScreenToClient ( rc );
wndPlaceholder.DestroyWindow();
// Create the AX host window.
wndIE.Create ( *this, rc, _T(&&),
WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN );
接下来我们用CAxWindow方法创建一个ActiveX控件,有两个方法可以选择:CreateControl()和CreateControlEx()。CreateControlEx()用一个额外的参数返回接口指针,这样就不需要再调用QueryControl()函数。我们感兴趣的两个参数是第一个和第四个参数,第一个参数是字符串形式的浏览器控件的GUID,第四个参数是一个IUnknown*类型的指针,这个指针指向ActiveX控件的IUnknown接口。创建控件后就可以查询IWebBrowser2接口,然后就可以像前面一样控制它导航到某个URL。
CComPtr&IUnknown& punkC
CComQIPtr&IWebBrowser2& pWB2;
// empty VARIANT
// Create the browser control using its GUID.
wndIE.CreateControlEx ( L&{A-11D0-A96B-00C04FD705A2}&,
NULL, NULL, &punkCtrl );
// Get an IWebBrowser2 interface on the control and navigate to a page.
pWB2 = punkC
pWB2-&Navigate ( CComBSTR(&about:mozilla&), &v, &v, &v, &v );
对于有ProgID的ActiveX控件可以传递ProgID给CreateControlEx(),代替GUID。例如,我们可以这样创建浏览器控件:
// Use the control's ProgID, Shell.Explorer:
wndIE.CreateControlEx ( L&Shell.Explorer&, NULL,
NULL, &punkCtrl );
CreateControl()和CreateControlEx()还有一些重载函数用于一些使用浏览器的特殊情况,如果你的应用程序使用WEb页面作为HTML资源,你可以将资源ID作为第一个参数,ATL会创建浏览器控件并导航到这个资源。IEHoster包含一个ID为IDR_ABOUTPAGE的WEB页面资源,我们在About对话框中使用这些代码显示这个页面:
wndIE.CreateControl ( IDR_ABOUTPAGE );
这是结果:
CreateControl()和CreateControlEx()还有一些重载函数用于一些使用浏览器的特殊情况,如果你的应用程序使用WEb页面作为HTML资源,你可以将资源ID作为第一个参数,ATL会创建浏览器控件并导航到这个资源。IEHoster包含一个ID为IDR_ABOUTPAGE的WEB页面资源,我们在About对话框中使用这些代码显示这个页面:接下来我们用CAxWindow方法创建一个ActiveX控件,有两个方法可以选择:CreateControl()和CreateControlEx()。CreateControlEx()用一个额外的参数返回接口指针,这样就不需要再调用QueryControl()函数。我们感兴趣的两个参数是第一个和第四个参数,第一个参数是字符串形式的浏览器控件的GUID,第四个参数是一个IUnknown*类型的指针,这个指针指向ActiveX控件的IUnknown接口。创建控件后就可以查询IWebBrowser2接口,然后就可以像前面一样控制它导航到某个URL。在OnInitDialog()函数中我们使用
CAxWindow创建了一个新AtlAxWin,它定位于我们预先放置好的group box的位置上(这个group box随后被销毁):例子代码对上面提到的三个方法都用到了,你可以查看CAboutDlg::OnInitDialog()中的注释和未注释的代码,看看它们分别是如何工作的。
Keyboard Handling
最后一个但是非常重要的细节是键盘消息。ActiveX控件的键盘处理非常复杂,因为控件和它的宿主程序必须协同工作以确保控件能够看到它感兴趣的消息。例如,浏览器控件允许你使用TAB键在链接之间切换。MFC自己处理了所有工作,所以你永远不会意识到让键盘完美并正确的工作需要多么大的工作量。
不幸的是向导没有为基于对话框的程序生成键盘处理代码,当然,如果你使用Form View作为视图类的SDI程序,你会看到必要的代码已经被添加到PreTranslateMessage()中。当程序从消息队列中得到鼠标或键盘消息时,就使用ATL的WM_FORWARDMSG消息将此消息传递给当前拥有焦点的控件。它们通常不作什么事情,但是如果是ActiveX控件,WM_FORWARDMSG消息最终被送到包容这个控件的AtlAxWin,AtlAxWin识别WM_FORWARDMSG消息并采取必要的措施看看是否控件需要亲自处理这个消息。
如果拥有焦点的窗口没有识别WM_FORWARDMSG消息,PreTranslateMessage()就会接着调用IsDialogMessage()函数,使得像TAB这样的标准对话框的导航键能正常工作。
例子工程的PreTranslateMessage()函数中含有这些必需的代码,由于PreTranslateMessage()只在无模式对话框中有效,所以如果你想在基于对话框的应用程序中正确使用键盘就必须使用无模式对话框。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:149903次
积分:2773
积分:2773
排名:第4876名
原创:118篇
转载:18篇
评论:60条
文章:18篇
阅读:13105
(6)(3)(3)(11)(9)(7)(13)(1)(3)(4)(3)(3)(7)(69)  GOCR.js&是 GOCR(开源的 OCR 光学识别程序)项目的纯
版本,使用 Emscripten 进行自动转换。这是一个简单的 OCR (光学字符识别)程序,可以扫描图像中的文字回文本。
本文链接:
编译来源:
  Ocrad.js 相当于是 Ocrad 项目的纯 JavaScript 版本,使用 Emscripten 自动转换。这是一个简单的 OCR (光学字符识别)程序,可以扫描图像中的文字回文本。   不像 GOCR.js,Ocrad.js 被设计成一个端口,而不是围绕可执行的包装。这意味着后续的图像处理,并不涉及重新初始化可执行代码,以便处理图像尽可能少的进行,因此它需要的时间仅为 GOCR.js
在JS中,window.opener只是对弹出窗口的母窗口的一个引用。比如:a.html中,通过点击按钮等方式window.open出一个新的窗口b.html。那么在b.html中,就可以通过window.opener(省略写为opener)来引用a.html,包括a.html的document等对象,操作a.html的内容。假如这个引用失败,那么将返回null。所以在调用opener的对象前,要
最新版的jquery.lazyload.js已不再是伪的延迟加载了 一、请按照基本使用方法说明设置
//载入JavaScript 文件 &script src=&jquery.js& type=&text/javascript&&&/script& &script src=&jquery.lazy
它们很强大,但有时候也会得不偿失。如果你使用的是jQuery,它里面有一个内置的方法可以用来加载单个js文件。当你需要延迟加载一些js插件或其它类型的文件时,可以使用这个方法。下面就介绍一下如何使用它! 一、jQuery getScript()方法加载JavaScript jQuery内置了一个方法可以加载单一的js文件;当加载完成后你可以在回调函数里执行后续操作。最基本的使用jQuery.get
文件上传之前的检测,通常是通过文件名来判断文件类型是否合法,但是要想检测文件的大小很难办到,除非在本地或者使用控件。使用JS可以轻松解决词问题,js在上传图片前判断大小 这个可以用javascript实现,效果...//允许上传图片文件的大小
具体代码如下
&script language=javascript& var ImgObj=new I
js屏蔽效果
/** 屏蔽F1帮助 */ window.onhelp = function(){} /** *屏蔽 F5、Ctrl+N、Shift+F10、Alt+F4 *如果想要屏蔽其他键,则找到对应的 keyCode 再依照此方法即可 */ document.onkeydown = function(event){ event = window.
实现类似于Photoshop控制面板输入文本数字的效果,所以名称叫做PsWheel。用于控制输入数字类型文本框实现鼠标滚轮上下滑动改变值,支持正整数、小数类型输入文本。 兼容IE/Firefox/Opera/Safari/Chrom 可定义滚动变化间隔值,支持整数、浮点数 双击恢复初始值 仅3.92K,压缩后2.67K 代码
/* * cutePsWheel JS *
目标:js的属性名可以使用变量 举例:js对象object,当赋给该对象属性的时候可以采用以下方式
object.prop1 = &value1&;
object.prop2 = &value2&;
也可以采用如下方式:
object.push({prop1:&val
1、最简单的调用方式 直接写到html的body标签里面,如:
&html& &body onload=&func()&& &/body& &/html&
2、在JS语句调用
&script type=&text/javascript&& functi
在很多项目中,我们经常需要使用JS,在页面前面对前台的某些元素做做修改,js 的replace()方法就必不可少。 经常使用&ABCABCabc&.replace(&A&,&B&)的同学应该会比较清楚,改语句的最终结果是BBCABC,这种方法只能替换 第一个匹配的元素。如果替换所有呢?使用正则表达式即可: &ABCABCabc&
Cycle是一个很棒的jQuery图片切换插件,提供了非常好的功能来帮助大家更简单的使用插件的幻灯功能
下载cycle插件并引入,此时,注意把引入它的代码放在引入jQuery主文件之后。
&head& &script type=&text/javascript& src=&js/jquery-1.8.0.min.js&quot
1、用JS定义一个图片数组,里面存放你想要随机展示的图片
ar imgArr=[&http://www.jb51.net/logo_cn.png&, &http://www.jb51.net/baidu_sylogo1.gif&, &http://www.jb51.net/news/uploadImg/
我们时常在使用png图片的时候,在ie6下发生背景不透明的问题,下面给大家介绍下一个js解决的方式。 首先我们要用到一个js,代码如下:
/** * DD_belatedPNG: Adds IE6 support: PNG images for CSS background-image and HTML &IMG/&. * Author: Drew Diller
在jsp页面上可以使用&fmt:------对数字对行格式化
在js中----------
Javascript也提供了对数字进行格式化输出的支持
Number对象提供的几种格式化函数:
toExponential([fractionDigits]) :将数字按科学计数法格式返回,其中的fractionDigits值小数点后保留的位数。 toFixed([fractionDigits
  通常网站的布局都不是单一的。例如图像在电脑、平板和智能手机上可能显示的形状是不同的。特别是如果你使用的是全屏图像,在你必须使用相同的图像文件的情况下,你的主题可能会被截断或完全缺失,或者看起来很尴尬。   FocusPoint 这款 jQuery 插件可以确保你的图像中的任何容器看起来都很棒,它提出了“响应裁剪”的概念,确保你的图片的重要组成部分被裁剪出来,动态图像裁剪以填充可用空间又不会裁剪
使用JS获取具有焦点控件的ID:
$(&#textID&).click(function(){ var act = document.activeElement. if(act == &textID& ){ alert(&true&); }else{ alert(&false&q
做项目时自己写一段js给大家。关于文本限制字数的问题,在实际开发中经常用到;主要问题出现在对中文的限制,下面代码就解决关于限制字节数的校验问题;只要将此下代码保存到一个js文件中并引入到校验的页面中,便可使用!同时希望大家给与大力支持和宝贵意见,本人会在今后闲余之际,发表更多的好文章,谢谢!! /* value:值; byteLength:数据库字节长度 &nb
Grunt.js是什么?Grunt.js是一个Javascript Task Runner(Javascript任务运行器),其基于NodeJS,可用于自动化构建、测试、生成文档的项目管理工具。 Grunt.js并不是仅仅是构建工具,实际上他只是任务运行器,管理每个子任务的自动化运行,我们还能使用他做更多东西。 为什么使用Grunt.js?简单的说:为了自动化。对于前端项目,例如: o
本文是我最近对Node.js学习过程中产生的一个想法,提出来和大家一起探讨。 Node.js的HTTP服务器 使用Node.js可以非常容易的实现一个http服务,最简的例子如官方网站的示例:
var http = require('http'); http.createServer(function (req, res) {
  我们通常使用鼠标和键盘(在移动端使用触摸)来操作网站,如今 Voix.js 能够让我们使用声音控制网站,很酷吧?它可以启动和停止侦听麦克风,在检测到一个给定的关键字时触发绑定的特定事件。Voix.js 使用很简单,不过目前只支持 Chrome 浏览器。
   立即下载
本文链接:Voix
1.javascript刷新页面的方法
window.location.reload();使用window.open()弹出的弹出窗口,刷新父窗口 window.opener.location.reload() 使用window.showDialog弹出的模式窗口
yepnope.js的一个典型实例:
yepnope({ test : Modernizr.geolocation, yep : 'normal.js', nope : ['polyfill.js', 'wrapper.js'] });
此实例表示如果Modernizr.geolocation为真的时候加载normal.js,为假则加载polyfill.js及wrapper.js。 yepn
最近的项目里面需要对书籍的封面进行处理,就是加一条阴影线形成书脊的凹凸感,然后将书脊切出,分成两部分,以便客户端实现打开动画。由于需要在服务器端处理,使用就研究使用imagemagick来进行。同时准备封装了一个Node.js和Python的方法,主要还是讲一下然后使用imagemagick来对图片进行缩放、合成后进行裁剪吧。
首先素材文件如下(左边未处理封面,右边为需要合成上去的阴影):
在页面跳转的时候
一般使用都是js
window.location.href
当然也可以使用
&html& &head& &meta http-equiv=&refresh& content=&0;url=&& &title&&/titl
1. 简介 首先是Socket.IO的官方网站:http://socket.io 官网非常简洁,甚至没有API文档,只有一个简单的“How to use”可以参考。因为Socket.IO就跟官网一样简洁好用易上手。 那么Socket.IO到底是什么呢?Socket.IO是一个WebSocket库,包括了客户端的js和服务器端的nodejs,它的目标是构建可以在不同浏览器和移动设备上使用的实时应用。
  Sails.js 可以帮助你很容易的构建企业级的 Node.js 应用程序。它被设计成类似 Ruby on Rails 的 MVC 架构,但风格更现代,支持面向数据的 Web 应用程序开发,特别适合用于实时的功能实现,如聊天。   Sails.js API 的脚手架和 Rails 的脚手架不同。它会为你的模型自动生成一个 RESTful JSON API,它支持 HTTP 和 WebSocke
1、对象的继承,一般的做法是复制:Object.extendprototype.js的实现方式是:
Object.extend = function(destination, source) {
for (property in source) {
注:抄&深入浅出Extjs&书 传统的js实现继承操作为: 一:定义一个父类
var BaseClass = function(){ //..... }; BaseClass.prototype.someMethod = function(){ //..... }; BaseClass.prototype.overridenMethod = function(){
1.String.prototype.camelizeBUG 这个方法用来返回字符串的骆驼写法。用js控制元素的style的时候经常使用 比如 varss=&font-color& ss=ss.camelize()&nbsp
getAttribute()方法 至此,我们已经向大家介绍了两种检索特定元素节点的办法:一种是使用getElementById()方法,另一种是使用getElementsByTagName()方法。在找到那个元素后,我们就可以利用getAttribute()方法把它的各种属性的值查询出来。 getAttribute()方法是一个函数。它只有一个参数――你打算查询的属性的名字: object.get
本文原理是使用正则表达式匹配location.search中的字符串。其中三个主要函数为 getQueryString()、getQueryStringByName(name)和getQueryStringByIndex(index)
三个主要方法:
getQueryString
获取QueryString的数组。 例如路径QueryStringDemo.html?
如果不想在url中看到有明文,比如http://localhost:8080/template_1/login.action?user=张三
可以使用js的encodeURI的URLDecoder.decode一起使用一起来把url加密下
(1)JS在页面上把数据var val = encodeURI(encodeURI(&要传到服务器端的是值&)); //调用2次enco
js中的正则表达式比起C#中的正则表达式要弱很多,但基本够用了1定义正则表达式2关于验证的三个这则表达式方法3正则表达式式的转义字符1定义正则表达式在js中定义正则表达式很简单,有两种方式,一种是通过构造函数,一种是通过//,也就是两个斜杠。例如
var re =new RegExp(&\\?(\\w{1,}=\\w{1,}&am
  Textillate.js 是一款实现极酷 CSS3 文本动画的简单插件。它整合了两个流行的工具库(animate.css 和 lettering.js)来提供易于使用的插件,能够把 CSS3 动画应用到文本内容上。
  只要引入textillate.js 和它依赖的文件就能够给你的内容加上独一无二的特效。
在线演示 &nbs
var i = 5; function init(){ //获得对象的控制权 var span1 = document.getElementById(&span1&); //修改其属性 span1.innerHTML = i--; //定时的操作:window.setTimeout('',1000) window.setInterval(); window
在写跨浏览器的js程序中,检测浏览器是一个很重要的工作。我们不时要为不同的浏览器写分支代码。如下是一种:
//添加事件工具函数 function addEvent(el,type,handle){
if(el.addEventListener){//for standard browses &
JS 字符串有replace() 方法。但这个方法只会对匹配到的第一个字串替换。 如下例:
&HTML& &HEAD& &TITLE& New Document &/TITLE& &/HEAD& &BODY& &script& var str = &wordwordwordword&; va
如果用.net控件可以调用reset方法,可是如果用html控件就只能用js解决了。 方法是在file外层套一个span,重设span里的html值
var html=document.getElementById('uploadSpan').innerHTML; document.getElementById('uploadSpan').innerHTML=
JS 字符串有replace() 方法。但这个方法只会对匹配到的第一个字串替换。 如下例:
&HTML& &HEAD& &TITLE& New Document &/TITLE& &/HEAD& &BODY& &script& var str = &wordwordwordword&; v
在javascript中原型(prototype)定义了特定类型的所有实例都可以访问的属性和方法,很多些情况下需要重新对原型中的属性赋值,如果方法错误会导致一些意想不到的情况(仅仅是对像我这样的新手奋斗),下面通过测试对这部分知识做一个简单的总结。
基本类型定义如下:
function Person(){}
Person.prototype={ constructor:P}

我要回帖

更多关于 封装控件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信