extjs4 define的一些问题

今天同bryntum.com的Mats讨论了一些Extjs4的问题:

1: Ext.define中的属性定义要注意,不要用object或array类型

例如:

Ext.define('MyPanel', {
    extend : 'Ext.Panel',
	fd1:{
		p1:1,
		p2:2
	}
});

这样定义的类MyPanel创建的所有实例的fd1属性会指向同一个json对象。这是因为目前Extjs的实现的属性copy没有深拷贝,同样的问题存在于通过config定义的属性。

 

解决方案:

constructor: function() {
				arguments[0].fd1 = {p1:1,p2:2};				
				this.callParent(arguments);
			}

即通过在构造器中设置实例属性来达到目的。

Mats说这不是bug,而是prototype本身就是这样的。但是我觉得真是容易上当,这样的解决方案也很不方便。

 

2: 怎样在config中设置scope?

name="code" class="js">Ext.define('MyPanel', { extend : 'Ext.Panel',

Continue reading extjs4 define的一些问题

javascript 正则表达式new Regex方式的问题

我一般使用第一种方式,即re = /pattern/[flags] 。

这次使用re = new RegExp("pattern",["flags"]) 这种方式半天不起作用。

再想一下,原来我忽略了\这个字符串在javacript string中的本来作用。\是转义字符啊。

所以就像java的\要多加一个的道理,如下例是等同的

var reg = /\d+/g;
var reg2 = new RegEx('\d+','g');

 

这个问题乍一看还真不好看出来。

所以还是第一种方式要好些。

 

这里推荐一个不错的正则测试网站http://www.gethifi.com/tools/regex

Continue reading javascript 正则表达式new Regex方式的问题

td中内容固定宽度

这个是老生长谈,但是要用时有记不清,还是来拦下笔头心里踏实。

首先要对table引用样式table-layout: fixed; 并且table要指明宽度,百分比,像素都可以,但要指明。

对于td要指明宽度,百分比,像素都可以,其他列都指明,本列不设置也可以(但其他列都要指明,这样才能计算本列宽,否则两个未指明宽度列就不好控制)。

td 需要overflow:hidden;white-space: nowrap;这两个样式。

这样就行了。

Continue reading td中内容固定宽度

form action属性默认值与method属性相关的一个问题

form大家都很熟悉,都用老的了。这次我就碰到这么个问题,我想使用form来提交查询参数,但是要达到刷新页面这些参数还在的效果,那么最好是使用get方法来提交了。但是我不希望设置action,这样就不用关心原来的url了,而且不会冲掉之前的url参数。

但是get方法和post方法不一样:

get方法下,会将input里面的值添加到url后面,原来的参数会冲掉

post方法下,会将input里面的值作为http内容提交,因此不会影响原来的url也不会冲掉参数。

就是这个区别,会对你的编程思路造成影响。如果使用get,那么你还需要将之前的想办法参数手动保留下来,例如将参数写入input。

如果用post,你可能需要注意重置一些参数。

 

明天国庆,节日快乐!

Continue reading form action属性默认值与method属性相关的一个问题

Jquery tmplate 巧用

Jquery有个template插件,提供将html标签转为模板的功能,但是这个模板一定又得是个完整的html元素。它是设计为最终使用appendTo等方法添加到DOM中去得。

那么我要是想使用它作为纯粹的字符串模板,那就没法了?找了半天,就是不提供这个功能。

这里介绍怎样利用它来实现字符串模板:

将字符串模板放在textarea元素中,使用text()方法来获得展示好后的字符串。

function tpml(tpl, context) {
		// we can not use the same textarea, must remove it and use text() on it
		// one time
		ids.tpl_text.innerHTML = '<textarea id="txt_tmpl">' + +'</textarea>';
		return $('#txt_tmpl').text(ajax_tpls[tpl]).tmpl(context).text();
	}

注意,每次必须重新创建一个textarea来包含文本,因为我发现第二次对textarea使用text()不起作用。

 

但是我有点烦的就是这个基本功能怎么它就没提供呢。

Continue reading Jquery tmplate 巧用

wordpress i18n多语言支持实现

文档http://codex.wordpress.org/I18n_for_WordPress_Developers

WP使用gettext(GNU来源项目)来实现i18n,带式实际使用是WP的函数__()和_e(), __是返回对应字符串,_e则是加载对应字符串并echo到返回流中。

首先WP的多语言是个全局配置wp-config.php中的配置项WPLANG指定是哪个语言。

然后在程序中加载mo

load_theme_textdomain (theme对应函数)

或是plugin中使用load_plugin_textdomain( $domain, $path_from_abspath, $path_from_plugins_folder )

来加载文件夹中对应语言的mo文件。

然后在你的php代码中使用__或_e来使用这些多语言。

wordpress多语言要使用xgettext生成pot文件然后转为po文件再转为mo文件,这位台湾同胞写的比较详细:

http://blog.longwin.com.tw/2010/08/windows-gettext-2010/

 

Windows 的 GetText 工具安裝
GetText 所需相關 Library 安裝
  • 上述套件下載後, 於 Windows XP 會缺下述兩個 Library:
    • libexpat.dll
    • libiconv2.dll
  • 可自行去尋找, 或者 直接下載 我抓好的版本 : gettext-dll.tgz
  • 將這兩個檔案放到 C:\gettext\bin\ 即可.
GetText 工具使用
  • C:\gettext\bin\xgettext.exe --from-code=UTF-8 -d hello hello.php
  • C:\gettext\bin\msgmerge.exe -o hello.po locale/zh_TW/LC_MESSAGES/hello.po hello.po
  • C:\gettext\bin\msgfmt.exe -o locale/zh_TW/LC_MESSAGES/hello.mo hello.po
  • 但是我试过了,不是很好用,其实在windows下最方便的是使用poedit了。
  • http://www.poedit.net/download.php 
  • 它是一个开元免费的工具,可以批量从php中导入生成po并且编辑,生成mo。

    这里我来讲一下怎么使用:

    新建File/New Catalog,出现对话框,红色框式必填的且要保证正确,

    Snap1

    Snap2

    source path就是php代码文件夹

    Snap3

    由于使用php所以需要添加关键字_e和__

    这样点击ok一路ok下去,就发现所有需要翻译的都加进来了。还可以编辑,它自动生成po,mo文件。

    很方便是吧。

  • Continue reading wordpress i18n多语言支持实现

  • mysql_函数引出的问题

    这次碰到个问题,写的php代码访问时总是超时,凭经验判断是数据库问题。

    但是逐步调试下去,发现是mysql_real_escape_string导致超时。

    后来才发现,php文档里写了,这样的函数是需要数据库连接的,我这个调用是在数据库连接建立之前,所以php一直尝试获取最近的连接,但是又没有,结果就超时了。

    同样的问题存在mysql_开头的函数中。

    另外的问题是mysql_insert_id没有返回值,发现是之前的insert操作执行后马上关闭了连接,导致再打开一个新连接再调用mysql_insert_id就会没有返回值。

    所以mysql_insert_id应该与insert 语句使用同一个连接。

    Continue reading mysql_函数引出的问题

    Perl web开发 windows下配置

    这几天忙的手都打搅了,稀里糊涂的某个项目要用Perl,尝试了一下,windows下配置apache和Perl执行CGI还是很简单的。

    首先要有Perl环境,每个perl cgi文件的顶部都有个路径

    #!d:/perl/bin/perl.exe

    这里就是说明使用哪里的perl引擎来执行此脚本,所以刚开始的同学很能copy个helloworld放在那里,结果运行报错,像apache日志里:The system cannot find the path specified.  : couldn't create child process

    这种情况下就要检查代码第一行与实际安装的Perl环境是否一致了。

    windows下使用ActivePerl是最好的了。安装我没碰到什么问题,最好让其建立环境变量。

     

    然后是Apache的配置:

    也很简单,只要两点:

    1 : AddHandler cgi-script .cgi .pl 这个是需要的

    2:Options execCGI 这个也是需要的

    将这两个设置配置到文件夹下,则可以和php handler同时使用。

    另外较“普遍”的方式是使用

    ScriptAlias /cgi-bin/ "D:/cgi-bin/"  需要反注释

    AddHandler cgi-script .cgi .pl 需要反注释,在<IfModule mime_module>中

    Options execCGI 在配置的文件夹中。

     

    其中/cgi-bin/可以改为你想要的名字,这样做会将所有此apache服务的站点中以/cgi-bin/开头的请求转为D:/cgi-bin/中的cgi文件来执行,比如

    apache配置了localhost:8001,localhost:8002两个站点,那么请求

    localhost:8001/cgi-bin/test.pl -->执行D:/cgi-bin/test.pl

    localhost:8002/cgi-bin/test.php -->执行D:/cgi-bin/test.php

    localhost:8002/cgi-bin/test.html -->执行D:/cgi-bin/test.html

    不管扩展名是什么,都认为是cgi脚本。

     

    参见:

    http://programmingnote.com/blog/?p=28 中文
    http://www.thesitewizard.com/archive/addcgitoapache.shtml 这里最详细

    Continue reading Perl web开发 windows下配置

    Pagination


    Total views.

    © 2013 - 2019. All rights reserved.

    Powered by Hydejack v6.6.1