Skip to content

Category Archives: Javascript

关于backbone _.bindAll

_.bindAll(this, ‘render’);
this.model.bind(’change’, this.render);

以上这两行代码主要为了当model改变时, view执行render, 那_.bindAll有什么用呢?
看这里:http://stackoverflow.com/questions/6079055/why-do-bindall-in-backbone-js-views
其中有一段是这样的:

Without _.bindAll( this, ‘render’ ) when model changes this in render will be pointing to the model, not to the view, so we won’t have neither this.el nor this.$ or any other view’s properties available.

当model被change时, this指向model, 但是我们要执行render, 那么就需要_.bindAll(this, ‘render’), 使model也有这个render的方法?
请达人解答?
*
新版本这样就可以
this.model.bind(’change’, this.render, this);

如果将C源文件(.c)生成目标文件(.o)

cc -c -o source.c target.o
或者可以把其做成lib
gcc -g -c source.c
ar -rc libsource.a source.o

在Yii使用Mixin – Behavior

我们知道Ruby有Mixin的功能,可以扩展类的实例方法或者类方法,只需要include就可以做这样的事情,但是PHP好像没有这样好用的方法?但是在Yii有这样的方法,怎么实现呢?
下面有一个例子:

 
Yii::app()->fileCache->attachBehavior(’EFileCacheBehavior’, array(’class’=>’EFileCacheBehavior’));

如果要在App启动的时候就能永这个EFileCacheBehavior,可以在Main.php配置这个文件…

‘fileCache’=>array(
‘class’=>’application.extensions.filecache.EFileCache’,
‘autoCleanExpiredCache’=>false,
‘behaviors’=>array(
‘EFileCacheBehavior’=>array(
[...]

JavaScript 的 new, 好久不见啊

原文: JavaScript, We Hardly new Ya --Douglas Crockford。
JavaScript是一门基于原型的语言,但它却拥有一个 new 操作符使得其看起来象一门经典的面对对象语言。那样也迷惑了程序员们,导致一些有问题的编程模式。
其实你永远不需要在JavaScript使用 new Object()。用字面量的形式{}去取代吧。
同理,不要使用 new Array() ,而代之以字面量[]。JavaScript中的数组并不象Java中的数组那样工作的,使用类似Java的语法只会让你糊涂。
同理不用使用 new Number, new String, 或者 new Boolean。这些的用法只会产生无用的类型封装对象。就直接使用简单的字面量吧。
不要使用 new Function 去创建函数对象。用函数表达式更好。比如:
frames[0].onfocus = new Function(”document.bgColor=’antiquewhite’”)
更好的写法是:
frames[0].onfocus = function () {document.bgColor = ‘antiquewhite’;};
第二种形式让脚本编译器更快的看到函数主体,于是其中的语法错误也会更快被检测出来。有时候程序员使用 new Function 是因为他们没有理解内部函数是如何工作的。
selObj.onchange = new Function(”dynamicOptionListObjects[”+
dol.index+”].change(this)”);
如果我们让用字符串做函数体,编译器不能看到它们。如果我们用字符串表达式做函数体,我们同样也看不到它们。更好的方式就是不要盲目编程。通过制造一个返回值为函数的函数调用,我们可以明确的按值传递我们想要绑定的值。这允许我们在循环中初始化一系列 selObj 对象。
selObj.onchange = function (i) {
return function () {
dynamicOptionListObjects[i].change(this);
};
}(dol.index);
直接对一个函数使用new永远不是一个好主意。比如, new function 对构造新对象没有提供什么优势。
myObj = new function [...]

ruby 中的self

在方法声明里面,表示当前类
在实例方法体里面,表示当前实例
在类方法体里面,表示当前类
在用 method.call method.send 之类的调用方式的话,情况还要复杂一点
Java 和 JavaScript 里面的 this 指针更加富啊
更加复杂

关于用js制作分页

Ext JS http://extjs.com/
Ext plugin http://wota.jp/svn/rails/plugins/branches/stable/ext/

JavaScript 对象是词典

引用:link
记住文章的题目:JavaScript 对象是词典“.才会有下面的方法

function sayHi(x) {
alert(”Hi, “ + x + ”!“);
}
sayHi.text = ”Hello World!“;
sayHi[”text2“] = ”Hello World… again.“;
 
alert(sayHi[”text“]); // displays ”Hello World!“
alert(sayHi.text2); // displays ”Hello World… again.“

看到有什么分别么?sayHi[”text2“]=sayHi.text,sayHi[”text2“]感觉想一个数组中的值,这和JavaScript 对象是词典的描述是吻合的
作为对象,函数还可以赋给变量、作为参数传递给其他函数、作为其他函数的值返回,并可以作为对象的属性或数组的元素进行存储等等
在 C# 中,我们使用类来实例化对象实例。但 JavaScript 与此不同,因为它没有类。您将在下一节中看到,您可以充分利用这一情况:函数在与”new“运算符一起使用时,函数将充当构造函数。
构造函数而不是类
前面提到过,有关 JavaScript OOP 的最奇怪的事情是,JavaScript 不像 C# 或 C++ 那样,它没有类。在 C# 中,在执行类似下面的操作时:
Dog spot = new Dog();
将返回一个对象,该对象是 Dog 类的实例。但在 JavaScript 中,本来就没有类。与访问类最近似的方法是定义构造函数,如下所示:

function DogConstructor(name) {
this.name = name;
this.respondTo = function(name) {
if(this.name [...]

查看DOM元素的方法

我知道在ruby可以通过Object.methods 知道对象都有什么方法(methods)但是在javascript怎么知道DOM元素所带的方法呢?
今天我看了PeepCode 教程008 Phototype的有这个介绍
如果我想知道元素h1有什么方法可以有以下步骤:
1.var h1 = $$(’h1′).first();
2.Object.keys(h1)或者Object.keys(window)在或者Object.keys(Event).sort()
3.Object.keys(h1).sort() //则可以按字母的顺序查看方法
就可以在firebug的console显示出来
或者Element.addMethods({
methods: function(element) {
return Object.keys(element).select(function(methodName) {
return typeof element[methodName] == ‘function’;
}).sort();
}
});
然后调用 $(document.body).methods()就可以了
$(document.body).methods().length()知道方法的个数
注意:这是在prototype中调试的