如果您在軌道上,則無需下載原型:它包含在發行版中。您可以通過將其放入頁面的中來包括在您的視圖中:
><%= 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中文網其他相關文章!