如果您在轨道上,则无需下载原型:它包含在发行版中。您可以通过将其放入页面的中来包括在您的视图中:
><%= javascript_include_tag 'prototype' %>
现在,让我们开始!
>使用原型的真正好处之一是它为非常常见的脚本任务提供的致命简单辅助功能。 $函数已经引起了人们的关注。给它一个或多个元素ID,它将返回给它们的引用:
><br> // reference to the element with the ID 'nav' <br> $("nav") <br> // an array of element references <br> $("img1", "img2", "img3")
>它就像一个汤具。GetElementById,令人惊讶的是,当您使用它时似乎更方便地编码。
>另一个非常有用的功能是document.getElementsByClassName,它在锡上说的是:它占用CSS类名称,并返回该类别的所有元素列表:
>// all elements with class 'navlink' <br> document.getElementsByClassName("navlink") <br> // all elements with class navlink and inside the element with ID 'nav' <br> document.getElementByClassName("navlink", $("nav"))
>另外,在编写本文时,原型版本1.5.0_rc0获得了功能强大的$$函数,它允许您使用标准CSS选择器语法选择元素:
// an array of all input elements inside 'commentform' <br> $$("#commentform input") <br> // an array of all links with the class 'external' <br> $$("a.external")
>
$F takes an ID and returns the value of any form field, for instance, a select box like this:
<select name="country" > <br> <option selected="selected" value="UK">United Kingdom</option> <br> <option value="FR">France</option> <br> ... <br> </select> <br> <br> $F('country') // 'UK'
oo ruby(ish)方式:class.create and object.extend
class.greate方法允许您以更类似红宝石的方式定义类,尽管这纯粹是美学的,因为它本质上只是称您将定义为构造函数定义的初始化方法,而不是采用传统的JavaScript方法来创建具有构造函数的对象的传统JavaScript方法。但是,
var DOMTable = Class.create(); <br> DOMTable.prototype = { <br> initialize : function(el) { <br> this.el = el; <br> }, <br> ... <br> }
// make a (shallow) copy of obj1 <br> var obj2 = Object.extend({}, obj1); <br> <br> var options = { <br> method : "post", <br> args : "" <br> }; <br> <br> // merges in the given options object to the default options object <br> Object.extend(options, { <br> args : "data=454", <br> onComplete : function() { alert("done!"); } <br> }); <br> <br> options.method // "post" <br> options.args // "ata=454" <br> options.onComplete // function() { alert("done!"); }
然后,如果我们想从上面的可分配中使我们的滴滴使我们的滴滴混合在一起,则可以将这些方法混合到可滴的对象: 现在,我们可以在表上调用这些方法: >函数绑定 >原型还为函数对象添加了两个真正有用的方法:绑定和bindaseVentListener。这些主要用于将函数绑定到特定对象,以便该关键字指向该对象。当您设置事件处理程序功能时,这非常有用。想象一下您尝试这样的事情: >
>
新的字符串和数字方法>
>
>
迭代红宝石方式:
原型的隐藏宝石之一是枚举的混合物和哈希对象,这些物体直接从红宝石中煮出来。如果您不熟悉Ruby,请不要担心。我将在这里解释这一切。
我们将从枚举开始。简而言之,当我们使用object.extend向对象添加枚举时,它为对象提供了许多真正有用的功能来使用其属性。枚举已添加到数组原型中,因此任何数组都具有这些新方法。以下是一些您可以使用新的“枚举”数组来做的示例:
首先,如果您不是红宝石主义者,枚举和哈希似乎有些麻烦,但是我可以向您保证,一旦您开始使用它们,您会想知道为什么您会愿意让RSI写所有这些循环的RSI!当您将其中一个或多个一起使用时,您将意识到这些新方法的巨大力量。你可以
“>在Encyte Media中更详细地阅读有关枚举和哈希的信息。 事件对象有助于提供许多人,这是JavaScript的圣杯:简单,跨浏览器事件处理: >以一种相当令人愉悦的方式,原型试图通过在页面卸载时自动删除每个观察者来避免IE中的讨厌记忆泄漏。 处理表单 形式对象
>通常,表单对象的方法以ID或对象引用元素的引用: 字段对象 字段对象处理单个元素,其方法通常以与形式对象相似的方式对元素进行ID或对象引用:>
形式序列化
请注意,表格巧妙地对访问不同形式元素的方式之间的差异巧妙地平滑,以便正确处理输入,选择,复选框和无线电按钮。 form.Serialize对于多个任务很有用,但是当我们与Ajax合作时,我们会很快就会出现。 这些观察者每秒检查一下数据是否已更改,如果有的话,将调用mycallbackfunction。
>原型具有4个对象(元素,插入,观察者和位置),可以在许多浏览器差异上进行各种形式的DOM操纵和平滑,从而使dom so屏幕上耗时令人发指。与其将计算机扔出窗口,不如浏览本节。 元素对象 元素对象以您可能期望的那样起作用:大多数元素方法只是将ID或对象引用您要操纵的元素。这是一些最有用的方法: 请参阅Sergio Pereira网站上的完整列表。
插入对象
>
>位置对象提供多种方法,可以告诉您屏幕上给定的位置,并以跨浏览器兼容的方式提供有关该位置的信息。这应该从编写动画,效果和拖放代码的编写动画,效果和拖放代码中汲取很多麻烦。查看职位参考以获取更多详细信息。 在 >所以,现在您都在抽一些Web 2.0操作,让我们看一个非常简单的Ajax请求:
>原型将自定义的HTTP标头添加到其所有AJAX请求中,以便您的服务器应用程序可以检测到它是AJAX调用,而不是正常调用。标题是: 这是用于检测AJAX调用的示例PHP函数: > >
如上所述,参数选项用于传递URL编码的变量字符串。如果您需要发送的数据是由表单设置的,就像大多数AJAX应用程序一样,您可以简单地使用表单。Serialize从所有表单字段中生成URL编码的字符串,并将其传递到类似的参数选项中:
>
在上面的示例中,Onsuccess和OnFailure是AJAX事件处理程序的两个示例。 ajax的选项对象中给出的事件处理程序函数给出了一个参数,这是该ajax调用的xmlhttprequest对象。我通常称此论点响应或resp。您可以使用此参数从服务器中获取响应:>
>
>上面的摘要将简单地替换ID为“ myDiv”的元素的内容,并用从服务器返回的任何内容。 ajax.periodicalupdater是相似的,但是以您设置的间隔重复进行Ajax调用:
<%= javascript_include_tag 'prototype' %>
<br>
// reference to the element with the ID 'nav' <br>
$("nav") <br>
// an array of element references <br>
$("img1", "img2", "img3")
// all elements with class 'navlink' <br>
document.getElementsByClassName("navlink") <br>
// all elements with class navlink and inside the element with ID 'nav' <br>
document.getElementByClassName("navlink", $("nav"))
// an array of all input elements inside 'commentform' <br>
$$("#commentform input") <br>
// an array of all links with the class 'external' <br>
$$("a.external")
$F takes an ID and returns the value of any form field, for instance, a select box like this:
<select name="country" > <br>
<option selected="selected" value="UK">United Kingdom</option> <br>
<option value="FR">France</option> <br>
... <br>
</select> <br>
<br>
$F('country') // 'UK'
var DOMTable = Class.create(); <br>
DOMTable.prototype = { <br>
initialize : function(el) { <br>
this.el = el; <br>
}, <br>
... <br>
}
// make a (shallow) copy of obj1 <br>
var obj2 = Object.extend({}, obj1); <br>
<br>
var options = { <br>
method : "post", <br>
args : "" <br>
}; <br>
<br>
// merges in the given options object to the default options object <br>
Object.extend(options, { <br>
args : "data=454", <br>
onComplete : function() { alert("done!"); } <br>
}); <br>
<br>
options.method // "post" <br>
options.args // "ata=454" <br>
options.onComplete // function() { alert("done!"); }
var Sortable = { <br>
sortBy : function(func) { <br>
... <br>
}, <br>
sortByReversed : function(func) { <br>
... <br>
}, <br>
reset : function() { <br>
... <br>
} <br>
};
var myTable = new DOMTable("table-id"); <br>
Object.extend(myTable, Sortable);
// sort the table using the given function <br>
myTable.sortBy(function (itemA, itemB) { ... });
var myObject = new Object(); <br>
myObject.message = "Hello!"; <br>
myObject.eventHandler = function() { <br>
alert(this.message); <br>
} <br>
<br>
$("mydiv").onmouseover = myObject.eventHandler;
$("mydiv").onmouseover = myObject.eventHandler.bind(myObject);
myObject.eventHandler = function(event) { <br>
alert(event.srcElement.nodeName); <br>
} <br>
<br>
$("mydiv").onmouseover = myObject.eventHandler.bindAsEventListener(myObject);
// "backgroundColor" <br>
"background-color".camelize()
camelize turns hyphenated strings to camel case strings that you can use to work with CSS properties.
<%= javascript_include_tag 'prototype' %>
<br>
// reference to the element with the ID 'nav' <br>
$("nav") <br>
// an array of element references <br>
$("img1", "img2", "img3")
// all elements with class 'navlink' <br>
document.getElementsByClassName("navlink") <br>
// all elements with class navlink and inside the element with ID 'nav' <br>
document.getElementByClassName("navlink", $("nav"))
// an array of all input elements inside 'commentform' <br>
$$("#commentform input") <br>
// an array of all links with the class 'external' <br>
$$("a.external")
表单和字段对象为使用表单和输入字段的工作提供了许多简单但方便的功能,以及支持原型AJAX实现的代码。
> $F takes an ID and returns the value of any form field, for instance, a select box like this:
<select name="country" > <br>
<option selected="selected" value="UK">United Kingdom</option> <br>
<option value="FR">France</option> <br>
... <br>
</select> <br>
<br>
$F('country') // 'UK'
var DOMTable = Class.create(); <br>
DOMTable.prototype = { <br>
initialize : function(el) { <br>
this.el = el; <br>
}, <br>
... <br>
}
// make a (shallow) copy of obj1 <br>
var obj2 = Object.extend({}, obj1); <br>
<br>
var options = { <br>
method : "post", <br>
args : "" <br>
}; <br>
<br>
// merges in the given options object to the default options object <br>
Object.extend(options, { <br>
args : "data=454", <br>
onComplete : function() { alert("done!"); } <br>
}); <br>
<br>
options.method // "post" <br>
options.args // "ata=454" <br>
options.onComplete // function() { alert("done!"); }
var Sortable = { <br>
sortBy : function(func) { <br>
... <br>
}, <br>
sortByReversed : function(func) { <br>
... <br>
}, <br>
reset : function() { <br>
... <br>
} <br>
};
var myTable = new DOMTable("table-id"); <br>
Object.extend(myTable, Sortable);
工作dom
<%= javascript_include_tag 'prototype' %>
<br>
// reference to the element with the ID 'nav' <br>
$("nav") <br>
// an array of element references <br>
$("img1", "img2", "img3")
“终于!”您在想:“他开始了我们真正想知道的。”是的,我把它留在了最后,以进入原型的Ajax助手,因为它们建在我们一直在经历的所有其他内容之上,并且在谈论Ajax时,它有助于理解原型的形式序列化,观察者和插入。
<%= javascript_include_tag 'prototype' %>
<br>
// reference to the element with the ID 'nav' <br>
$("nav") <br>
// an array of element references <br>
$("img1", "img2", "img3")
// all elements with class 'navlink' <br>
document.getElementsByClassName("navlink") <br>
// all elements with class navlink and inside the element with ID 'nav' <br>
document.getElementByClassName("navlink", $("nav"))
// an array of all input elements inside 'commentform' <br>
$$("#commentform input") <br>
// an array of all links with the class 'external' <br>
$$("a.external")
$F takes an ID and returns the value of any form field, for instance, a select box like this:
<%= javascript_include_tag 'prototype' %>
正如我们在本文中看到的那样,原型不仅本身是有用的,而且为编写其他更专业的库提供了一个绝佳的起点。这正是越来越多的人在做的事情。
> > script.aculo.us和moo.fx>托马斯·福克斯(Thomas Fuchs)的脚本。Aculo.us目前,它引起了人们对其Whiz-Bang效果和聪明的UI小部件的关注。它最初是核心原型库的一部分,但很快就会失控并摆脱了父母。 使用原型作为基础,script.aculo.us专门通过动画效果,易于使用拖放功能和功能强大的UI组件来提供丰富的用户体验。该网站上有一个不错的Wiki,并提供了快速增长的质量文档来帮助您入门,并示例页面以使您的创意果汁流动。由于script.aculo.us的文件大小越大,因此已分为几个文件,因此您的用户不必下载整个库,以便您可以使用一些幻灯片效果。但是,即使单个文件也很笨重。
如果您正在追求一些简单的效果,我真的会推荐moo.fx。它的尺寸只有3K,并为您提供一些切换的幻灯片和褪色效果,这些效果通常是简单的Ajax应用程序中所需的一切。如果您想写自己的效果,这也是一个很好的起点。请查看代码,以查看使用Prototype的对象进行编程的一个很好的示例。 Valerio显然非常专注于保持他的脚本文件大小的大小,因此他甚至具有“精简版”的原型版本(切成大约10k左右),并且是Ajax.Request的精益版本,我发现自己比完整的原型库更经常使用。绝对值得一看。
行为
行为是您的DOM脚本工具包的一个很好的补充,它允许您使用CSS选择器将行为添加到文档中。这是它允许您执行的示例:> 在行为网站上,
>在行为网站上阅读有关此信息的更多信息。现在可以使用前面讨论的全新$$函数来实现类似类型的事物,因此最终可能会变得多余。jquery
<br> // reference to the element with the ID 'nav' <br> $("nav") <br> // an array of element references <br> $("img1", "img2", "img3")
> jQuery是一个紧凑的小库,可在原型中效果很好,并创建了可以吸收XPath和CSS 3选择器的$函数的超级英雄版本。它将能力与某种极其聪明的方法链方法结合在一起,从而制造了非常简洁的代码。当心这个。
>原型是强大的套件。不幸的是,它的功能和工具的增长速度比文档快得多!我们设法涵盖了本文原型的每个角落,但不是每种方法。不过,我希望您现在知道要去哪里获取所需的额外信息。
如果您想了解更多,请尝试Ronnie Roller的Frototypedoc.com,这是一种与原型文档的不断增长相符的资源。玩得开心!
>
>无痛的JavaScript原型与其他JavaScript特征有何不同?>
如何创建一个无痛的JavaScript原型?>创建一个涉及无痛的JavaScript原型涉及定义一个函数,该函数将用作原型,然后使用“新’密钥单词”来创建新的Optife otty protots类型。这是一个简单的示例:
函数汽车(制造,模型,年){
this.make = make; make;
}
var mycar = new Car(' “ Mycar”是一种由“汽车”原型创建的新对象。
我可以在创建它之后添加属性吗?这是使用“原型”属性完成的。这是一个示例:
car.prototype.color ='black';
car.protype.start = function(){
console.log('car start'start');
} } }
在本示例中,在本示例中,'start'方法添加到'car'''''''''''''''''''''''''''proct.
>使用无痛的JavaScript原型?
我可以使用其他JavaScript功能使用无痛的JavaScript原型吗?实际上,它经常与其他功能一起使用以创建更复杂和更强大的应用程序。
>
我在哪里可以了解有关无痛Javascript原型的更多信息?>在线可用的许多资源可以在线学习更多有关无痛JavaScript原型的信息。一些好的起点包括Mozilla开发人员网络(MDN)以及Codecademy and Udemy等网站上可用的各种JavaScript教程和课程。
>以上是使用原型无痛的JavaScript的详细内容。更多信息请关注PHP中文网其他相关文章!