Dojo 1.7 Release Notes翻譯完成,包含若干重大更新

Dojo 1.7做爲變化重大的一個版本,已經Release近兩個月,而如今已經放出了1.7.2的小版本更新,包括了一些小的fix。讓人難以理解的是即便Dojo 1.7已經Release這麼久,可是其release notes至今仍然是draft狀態。。這也致使了遲遲不能對它進行翻譯。看來Dojo社區的那幫老大徹底是技術狂,對於文檔和社區其餘用戶的關注還遠遠不夠啊,須要改進。。javascript

儘管Release notes仍然是草稿狀態,但也算相對完整,包括了對重要更新的介紹,以及一小部分的升級指南。因而咱們對其進行了翻譯,但願能幫助你們儘快瞭解Dojo1.7的新特性,重點關注依然是:AMD。咱們同時會保持對英文版release notes的同步更新,你們也能夠關注咱們的新浪微博:http://weibo.com/dojotoolkit 來得到最新進展。html

下面內容翻譯自:http://livedocs.dojotoolkit.org/releasenotes/1.7java

瀏覽器支持

通過有效的測試,Dojo1.7支持全部下面列出的瀏覽器。即便某個瀏覽器不在列表中,也有多是支持的,尤爲是那些快速release的瀏覽器(好比Chrome,Firefox)。另外再隨後的一些小的release中,Dojo可能會包含一些針對最新瀏覽器的修復,可是並不必定能保證。

桌面系統
  • Firefox 3.6-8
  • Safari 5.0-5.1
  • Chrome 13-15
  • IE 6-9
  • Opera 10.50-11.50
  • Mobile (dojox/mobile)

iOS 4.x, 5.0 (Mobile Safari) (including all Dijit widgets except Editor, Dialog)
  • Android 2.2, 2.3, 3.1
  • Blackberry 6
  • Mobile compatibility on desktop browsers: IE 8-9, Firefox 3.6-7, Safari 5.0-5.1, Chrome 13-15


基本功能
Dojo Base

AMD

Dojo如今徹底支持AMD模塊的異步加載,而且同步或者異步加載是能夠經過「async」屬性進行配置的。
[javascript] view plain copy print ?
  1. <script data-dojo-config="async: true" src="dojo.js"></script>
<script data-dojo-config="async: true" src="dojo.js"></script>注意之前被強制加載的模塊,如今在異步模式下會被隱含加載。須要確保在require()的參數列表裏列出全部模塊中須要使用的其餘依賴模塊(包括再parseOnLoad設爲true時須要引入dojo/parser)。好比:
[javascript] view plain copy print ?
  1. <script src="/dojo/dojo.js"
  2. data-dojo-config="parseOnLoad: true, async: true"></script>
  3. <script>
  4. require([
  5. "dojo/dom", // needed for dojo.byId
  6. "dijit/registry", // needed for dijit.byId
  7. "dojo/parser", // needed for parseOnLoad to run
  8. ...
  9. ], function(dom, registry, parser){
  10. // callback when above modules finish loading
  11. function update(){
  12. var viewNode = dom.byId("view1");
  13. var view1 = registry.byId("view1");
  14. view1.domNode.innerHTML = "...";
  15. }
  16. });
  17. </script>
<script src="/dojo/dojo.js" data-dojo-config="parseOnLoad: true, async: true"></script> <script> require([ "dojo/dom", // needed for dojo.byId "dijit/registry", // needed for dijit.byId "dojo/parser", // needed for parseOnLoad to run ... ], function(dom, registry, parser){ // callback when above modules finish loading function update(){ var viewNode = dom.byId("view1"); var view1 = registry.byId("view1"); view1.domNode.innerHTML = "..."; } }); </script>注意,許多Dojo核心和dijit中的模塊都在1.7中拆分紅更小的模塊,以便再異步加載的狀況下能支持輕量級的應用。另外,做爲這項改動的一部分,Dojo核心中的模塊尚未被完美拆分,這項工做將在1.8中繼續進行。

Limitations
一些侷限性

某些已有的Dojo 1.7以前的模塊被設計成只支持同步加載模式。這些模塊經過使用同步模式能夠繼續使用,但若是將async設置爲true,即異步模式,則沒法工做。Dojo社區正在研究一些可能的控件替換,使得這些功能可以無缺的支持異步模式。這是Dojo 2.0以前的工做。

DTL (dojox.dtl - Django Templating):

dojox.dtl就是一個例子,它的設計以同步加載爲前提。但這個模塊已經被重構以支持異步的AMD加載,可是全部的tag和filter的類庫須要被顯示的引入。這個限制對於在用戶定義的類庫和dojox.dtl的默認類庫都是同樣的。

下面的表格列出了內置的tag和它們對應的模塊:
Tag Library Tags
dojox/dtl/tag/date now
dojox/dtl/tag/logic if, for, ifequal, ifnotequal
dojox/dtl/tag/loader extends, block, include, load, ssi
dojox/dtl/tag/misc comment, debug, filter, firstof, spaceless, templatetag, widthratio, with
dojox/dtl/tag/loop cycle, ifchanged, regroup

舉個例子,若是一個模版使用"{% for" 標籤, 那麼 'require("dojox/dtl/tag/logic")' 就必須經過應用來加載,從而使得「for」標籤可以運行。node

下面的表格列出了內置的filter和它們對應的模塊:git

Filter Library Filters
dojox/dtl/filter/dates date, time, timesince, timeuntil
dojox/dtl/filter/htmlstrings linebreaks, linebreaksbr, removetags, striptags
dojox/dtl/filter/integers add, get_digit
dojox/dtl/filter/lists dictsort, dictsortreversed, first, join, length, length_is, random, slice, unordered_list
dojox/dtl/filter/logic default, default_if_none, divisibleby, yesno
dojox/dtl/filter/misc filesizeformat, pluralize, phone2numeric, pprint
dojox/dtl/filter/strings addslashes, capfirst, center, cut, fix_ampersands, floatformat, iriencode, linenumbers, ljust, lower, make_list, rjust, slugify, stringformat, title, truncatewords, truncatewords_html, upper, urlencode, urlize, urlizetrunc, wordcount, wordwrap


has.js
Dojo 1.7 引入了一個稱之爲has()的特性檢測API。大多數Dojo核心和dijit模塊已經被轉換爲使用這些特性檢查。這項工做將繼續在1.8中進行。

dojo.connect
This has been refactored to use the new dojo/on module for event handling. See dojo/on below for more information.
這個API已經被重構爲新的dojo/on模塊以用於事件處理。參見下面對dojo/on的介紹。

Dojo核心

dojo/on
這個新模塊提供了一套新的事件處理系統,包含以下的新功能:
  • 事件代理: 事件類型能夠包含元素選擇符來指定特定的觸發對象,例如:on(list, "li:click", onListItemClickHandler);
  • 擴展事件:可以建立並使用自定義事件類型做爲擴展事件。新的dojox.gesture.*實現了一些擴展事件。
  • 可暫停事件:事件處理能夠經過on.pausable暫停。
  • 單次執行事件:經過on.once使監聽函數僅被調用一次。
  • (手動)發射事件:瀏覽器內置事件能夠用on.emit(target, "click", event);來(手動)觸發。
  • 自包含的事件處理對象:on()調用返回的對象包含remove()方法,可直接用於中止對該事件的監聽。
  • 觸摸事件的標準化:觸摸事件實現了跨平臺(Android,iOS)的標準化。
  • 基於has()的功能檢測:這使得爲特定瀏覽器打包(移除該瀏覽器不須要的功能,例如一些針對IE的特殊代碼)成爲可能。
這個模塊去除了一些遺留的鍵盤事件處理代碼(最好使用keydown事件),所以減小了代碼量。
這個API計劃在Dojo2.0中代替現存的dojo.connect函數。針對非DOM事件所傳的參數與事件名稱在Dojo2.0中會有改變,所以目前Dojo1.x的應用若是使用dojo.connect連接了非DOM事件,就不該遷移到dojo/on,以避免在未來受到影響。

dojo/query
這個新模塊提供了查詢DOM結點的功能(相似於dojo.query)。該模塊還能加載其餘的選擇符引擎,例如Sizzle、Slick、Dojo新的輕量級查詢選擇符引擎、甚至是瀏覽器內置的選擇符查詢引擎(但其CSS兼容性最差)。在異步模式下(參見新的Dojo config設置),當dojo/main沒有加載時,dojo/query將載入一個採用瀏覽器自帶的qeurySelectAll方法的輕量級引擎,而且只在須要的時候加載完整的acme選擇符引擎。dojo/query採用了新的has()方法作功能檢測,以便在針對特定瀏覽器打包時只加載該瀏覽器所需的最小的選擇符引擎。

dojo/data/ObjectStore
若是底層的object store是"Observable"的,這個模塊如今將廣播該store所產生的全部通知。若是底層的object store在返回結果(results)上有一個observe()方法(一般是用dojo.store.Observable包裝),那麼dojo/data/ObjectStore就會監聽object store中發生的變化,併發送出dojo.data通知事件。

Parser(解析器)
Dojo的頁面解析器在新版本中獲得了進一步加強。如今您能夠區分瀏覽器自帶的捏製屬性和Dojo對象的屬性,將內置屬性直接寫在html標籤中,而將Dojo對象屬性都寫到data-dojo-props屬性裏,例如:
  1. <input data-dojo-type="dijit.form.TextBox" name="dept" data-dojo-props="scrollOnFocus: true"/>
<input data-dojo-type="dijit.form.TextBox" name="dept" data-dojo-props="scrollOnFocus: true"/>

解析器還支持聲明方式建立dojo.on和object.watch的監聽函數。方法是加入type="dojo/on"或type="dojo/watch"的<script>標籤。下面是一個type="dojo/on"的例子:
  1. <button data-dojo-type="dijit.form.Button">
  2. Click Me!
  3. <script type="dojo/on" data-dojo-event="click" data-dojo-args="e">console.log("I was clicked!");</script>
  4. </button>
<button data-dojo-type="dijit.form.Button"> Click Me! <script type="dojo/on" data-dojo-event="click" data-dojo-args="e">console.log("I was clicked!");</script> </button>

一個type="dojo/watch"的例子(基於dojo/on):
  1. <button data-dojo-type="dijit.form.Button">Click Me!
  2. <script type="dojo/on" data-dojo-event="click" data-dojo-args="e">
  3. dijit.byId("textBox1").set("value", "New Value!");
  4. </script>
  5. </button>
  6. <div data-dojo-type="dijit.form.TextBox" id="textBox1" data-dojo-props="value: 'Old Value'">
  7. <script type="dojo/watch" data-dojo-prop="value" data-dojo-args="prop,oldValue,newValue">
  8. console.log("Prop '"+prop+"' was '"+oldValue+"' and is now '"+newValue+"'");
  9. </script>
  10. </div>
<button data-dojo-type="dijit.form.Button">Click Me! <script type="dojo/on" data-dojo-event="click" data-dojo-args="e"> dijit.byId("textBox1").set("value", "New Value!"); </script> </button> <div data-dojo-type="dijit.form.TextBox" id="textBox1" data-dojo-props="value: 'Old Value'"> <script type="dojo/watch" data-dojo-prop="value" data-dojo-args="prop,oldValue,newValue"> console.log("Prop '"+prop+"' was '"+oldValue+"' and is now '"+newValue+"'"); </script> </div>
注意:
目前再也不支持type="dojo/watch"的<script>標籤的prop屬性,解析器只能識別data-dojo-prop屬性。

提醒:
當使用異步模式時,您須要顯示地加載dojo/parser模塊以確保parseOnLoad: true可以生效。(在非異步模式下,dojo/parser將會自動加載,但會出現一條「不推薦」警告。從技術角度而言,dojo/parser是不被自動加載的,但在1.7以前,它在許多狀況下都會被自動加載,這是由於dijit/_Templated依賴於它,而許多widget都依賴dijit/_Templated。

dojo/touch
這個模塊提供了一組統一的觸摸事件:"press | move | release | cancel"。這些事件可以兼容大量設備(包括桌面設備)。

其原理很是簡單,"press | move | release | cancel"分別對應於:
  • "touchstart | touchmove | touchend | touchcancel" (觸摸屏設備W3C Touch Events Specification
  • "mousedown | mousemove | mouseup | mouseleave" (桌面設備)
所以有了dojo/touch,咱們在切換設備平臺時就再也不須要關心如何正確設置各類內置事件了。

dojo/touch基於 dojo/on ,下面的示例在桌面環境和觸摸屏設備(包括Android 2.2/2.3以及針對1.7的iOS3+)上都能正常工做:

更詳細的資料請參考 dojo/touch doc

Dijit
針對桌面瀏覽器的開發的Web應用常常在手機瀏覽器上運行失敗。爲避免這種狀況,Dojo從1.7開始,除了Editor控件之外的dijit控件增長了對主流手機平臺(蘋果、安卓以及黑莓)的基本支持。
另外,在手機平臺上運行Dialog控件時,必須把draggable參數設爲false,以確保Dialog的關閉圖標工做正常。將在將來的版本中修復這個bug。

_WidgetBase
_WidgetBase類添加了getParent()方法,可使用該方法獲得當前控件的父容器控件,不論父控件是否有isContainer標記。同時isContainer標記已被廢棄。

_TemplatedMixin, _WidgetsInTemplateMixin
新增了兩個粒度更小的模板聚合類:_TemplatedMixin和_WidgetsInTemplatedMixin。在控件模板內部不包含其餘控件時,使用_TemplatedMixin做爲控件的模板類;若是空間模板內部包含控件時,除使用_TemplatedMixin外,還要添加_WidgetsInTemplateMixin做爲控件的模板類。原先的模板類_Templated功能以及接口保持不變。

_setXXXAttr

_setXXXAttr方法做爲函數在以前的版本能夠設置對象屬性,或者觸發設置屬性時要被執行的邏輯。在新版本中_setXXXAttr還能被做爲單純的對象使用,如下舉例說明:1._setTabIndexAttr: "focusNode"
該語句會把對象tabIndex屬性直接添加到控件的focusNode上:this.focusNode.tabIndex;

2._setTitleAttr: { node: "titleNode", type: "innerHTML" }
該語句會使用title屬性對控件的titleNode.innerHTML進行賦值,如myWidget.set(「title」, 「hello world」)會給myWidget的titleNode.innerHTML賦爲hello world。
這樣就替換了本來的attributeMap的功能,attributeMap參數已被廢棄並將在2.0版本中刪除。

dijit/focus, dijit/place, and dijit/popup
focus、place以及popup三個模塊從dijit/_base移到了dijit目錄下,因此這三個模塊都不會在加載dijit時默認加載。也就是說,控件可根據須要選擇性的加載這三個模塊,避免增長沒必要要的代碼。
There are a few API changes in the top level modules compared to the ones in dijit/_base (although for backwards compatibility the modules in dijit/_base maintain their old API):
做爲可獨立加載的模塊,focus、place以及popup中的方法也作了相應的修改:
• popup.around()替換了dijit.popup.placeAroundElement(),同時參數也從{BL:」TL」,…}變爲更人性化的[「before」,」after」,…];
• dijit/focus再也不包含選擇(selection)相關的代碼,只包含focus相關代碼;
• dijit/focus提供了watch()和on()方法以檢測控件的得到焦點事件;
• dijit/_base/popup中一些原先可接受節點或控件做爲參數的方法,在新版本中只接受控件參數。
另外,dijit/popup模塊只能經過新的AMD API加載,如:
require(["dijit/popup"], function(popup){ popup.open(...); });

CalendarLite
dijit.CalendarLite是針對手機平臺開發的新日曆控件。其基本功能與Calendar相同,不過不支持鍵盤操做,也不包含月份下拉列表。
ComboBox, FilteringSelect
ComboBox和FilteringSelect爲應用dojo.store(新的數據讀寫接口)作了相應的修改,同時依然支持舊的dojo.data 接口。

DojoXweb


圖表 (Charting)
Action2d 包已經包括了新的縮放(Zoom)和搖擺(Pan)功能,以及數據指示和交互功能。它們使得用戶能用鼠標或者觸摸手勢來與圖表進行交互。
在移動設備方面採用各類方法類提升性能。大多數圖表類型都支持新的容許緩存參數,可以容許緩存和重用gfx圖形。
使用AMD模塊格式
經過兩個BidiSupport類來支持圖表的雙向文字.(一個類用於dojox.charting, 一個類用於dojox.charting.widget) 在程序中爲了支持雙向文字必須請求這些類。

儀表 (Gauges)
儀表從原來位於dojox.widget移動到了新的命名空間dojox.guages
加入了幾種新的指示器來用於建立用戶本身的儀表,例如文字指示器可用於以文字的形式繪出儀表的刻度值。
建立圓形儀表時可以選擇順時針或者逆時針走向。
改進了圓形刻度的標籤佈局
儀表如今可以支持在移動設備上的觸摸交互
Dojox.gauges使用AMD 模塊格式
能夠直接得到三種的新內建儀表:GlossyHorizontalGuage, GlossyCircularGauge和GlossySemiCircularGauge

地圖 (GeoCharting Map)
Dojox.geo.charting模塊實現了多種改進:包括tooltip管理,當更改數據列時模擬顏色變化
提供新的數據源結構,以及地圖元素和數據源元素之間的數據綁定
經過安裝專門的交互類,容許交互式的經過鼠標或者觸摸手勢來對地圖進行縮放和搖擺
經過新的地圖 Dijit控件將非dijit dojox.geo.charting 地圖控件封裝,從而實現更輕鬆的整合
使用AMD模塊格式

Gfx
如今每一個形狀都由一個關聯的惟一的id(Shape.getUID())來標識. 此外,新的dojox.gfx.shape.byId() 函數將返回與此形狀關聯的id。
添加了輸入事件來支持畫布提供者。這個功能缺省是打開的,能夠經過設置dojoConfig中的「canvasEvents」標誌來關閉之。
鼠標事件指向的Gfx形狀能夠經過事件自己的「gfxTarget」屬性來獲取:
group.connect("onmousedown", function(evt){ var s = evt.gfxTarget; ... });

Gesture
基於dojo/touch和dojo/on,這個新的模塊提供了一種機制,讓咱們能夠實現能良好運行在不一樣的設備上的手勢行爲,包括桌面和各類各樣的可觸摸設備。
dojox/gesture/Base
一個用於實現各類手勢行爲的抽象基類,它主要用於:
• 綁定 on() 監聽器用於處理手勢事件,如tap, taphold, doubletap
• 監聽底層事件並執行不一樣階段動做 - 'press'|'move'|'release'|'cancel'
• 基於on() 接口觸發手勢事件
實現一個手勢動做只須要擴展和覆寫適當階段的處理函數便可 - press() | move() | release() | cancel() 用於識別和觸發手勢
dojox/gesture/tap(只適用於單觸摸)
• 提供公共的tap手勢方式,包括tap, tap.hold and tap.doubletap
• 用戶可配置 e.g. Tap.hold的閾值, tap.doubletap有效半徑
dojox/gesture/swipe(只適用於單觸摸)
• 提供公共的swipe手勢方式,包括swipe, swipe.end
touch & gesture demo 展現了基於dojo/touch 和dojox/gesture.的dijit/form/HorizontalSlider 控件和dojo/dnd 是如何運行在 iOS4+ 的操做系統上的。 除了一個tap手勢, 這個示例也展現了基於多觸摸實現一個新的旋轉的手勢是很是容易的。
更多詳細信息請參考 dojox/gesture doc .
Grid
DataGrid/EnhancedGrid/TreeGrid/LazyTreeGrid
• 1.7 修復的大量的缺陷和問題, 更多詳細信息請參考 defect list
下一代Grid
• 進行中的項目:dgrid 和 gridx 正密切合做,目標下一代Grid
Mobile
Dojo Mobile 是目前市場上一流的移動web開發庫, 支持AMD加載方式和新的Build模式,如今有一個專門爲Dojo移動開發庫制定的新的指導手冊和詳細的API文檔Dojo Mobile Reference Guide
• 加入了新的BlackBerry OS6 皮膚,迄今爲止,已支持以上列表中全部的移動設備和操做系統。
• dojox.mobile.deviceTheme是一個皮膚加載器,他會識別訪問的設備並加載相應合適的皮膚。
• 新的SpinWheel控件讓你能夠經過該控件設置和選擇相應的值,支持兩種方式:SpinWheelDatePicker 和SpinWheelTimePicker,
• 新的卡盤(Carousel)控件,他會顯示一個圖像列表,用戶能夠從中選擇相應的元素。
• 新的RoundRectDataList 和EdgeToEdgeDataList 控件,他們基於RoundRectList 和EdgeToEdgeList控件,支持數據驅動。
• 新的PageIndicator控件,他會顯示當前的頁號,並配合以小圓點。該控件能夠和 SwapView 或者Carousel合用。
• 加入了一些新的動畫效果: Dissolve, Flip2, Cover, Reveal, Slide Vertical, Cover Vertical, Reveal Vertical, Swirl, Zoom In/Out, and Scale In/Out.
• 將FlippableView 控件改名爲SwapView.
• dojox.mobile 如今均基於 AMD 模式
• TextBox 控件從原來的 mobile/app/ 包下面移動到 mobile/包下面。
• 新的Tooltip 控件會彈出一個容器,該容器可包含簡單文本或另外一個新的控件。
• 新的Overlay控件從下方滑入,完成後則向下方滑出。
• 新的Opener控件加入了實時的屏幕大小偵測器,並配合以使用Tooltip控件(針對大屏的移動設備)和Overlay 控件(針對小屏的移動設備)。
• 新的ComboBox 控件(實驗階段) 支持文字搜索(同dijit.form.ComboBox)
• 新的ExpandingTextarea 控件支持縱向的基於文字內容的伸展和收縮。
• 新的Slider 控件使用戶可以很方便的經過觸摸/手勢來控制其值。
• 新的HTML 表單控件包裝器 (Textarea, CheckBox, RadioButton) 使得表單能夠和各類dijit的控件聯合使用,如:container/dialog 等等控件.
Limitations:
• 不少動畫效果是基於CSS 3 transition / animation的,而且他們的行爲依賴於具體的移動設備和移動瀏覽器,因此有些動畫效果在 Android 和BlackBerry等移動設備上並非很流暢。
• ScrollableView 在HTC Android設備上常常會被「凍死」, 如:HTC Evo, HTC Desire,等等,尤爲是當你在屏幕已經在滑動的同時,進行另一個滑動操做。這是JavaScript 的一個缺陷,目前尚未好的解決方案。
• 在Android設備上,當你經過觸摸的方式試圖選中ScrollableView中一個表單中的一個輸入框或者按鈕時,會發現有時沒法讓該控件獲取焦點,可能你須要多試幾回才行。
MVC
dojox.mvc 是一個新的實驗性質的dojox 項目,基於MVC的思想,實現Client段的Model,Control和View三層的分離,使得基於Dojo開發諸如企業級應用,IT應用,CRUD 應用,主從模式應用等等的複雜應用變得更爲簡單。這個release包括:
• 一流的數據模型,能與data stores直接交互
• 能讓控件或者可視化組件綁定到數據模型的數據綁定功能
• MVC 還包括分組(用於分級數據) 和重複(用於重複的數據,如:數組)
• 還有諸如 數據綁定輸出和數據驅動的UI生成器的MVC控件
• 能夠基於以上MVC模型構造出各類各樣的富數據模式示例
OpenLayers Maps
• 新的dojox.geo.openlayers 工具包基於已開源的OpenLayers庫,詳細可 (參見 http://www.openlayers.org/ ).
• 用戶可在以OpenLayers地圖爲背景的區域內添加添加 地圖相關Gfx 形狀或者控件.
• 基於AMD 的形式.

Migrationcanvas

升級指南


加載器,構建器相關
<script>

在之前的版本中,能夠經過<script>標籤來加載模塊(module)和layer, 例如
<script src="/mysite/app/MyWidget.js">儘管這種用法在1.7的構建後的build中依然有效,但將不推薦使用,而且在未構建的源代碼版本中將沒法使用,強制使用會致使程序出錯同時控制檯中會出現"multipleDefine" 錯誤。在這種狀況下應使用dojo.require(), 例如
dojo.require("app.MyWidget");或者直接用最新的AMD的require() API全局變量
在之前的版本中,能夠在一個模塊中經過以下方式定義全局方法:

dojo.provide("my.module");
function myOnClick(){ ... }

而後在1.7中,全部模塊都在一個封閉的方法中被解釋(evaluated),上述的方法將只存在於對應的閉包(closure)中而非全局空間中。若是須要在模塊中定義全局空間中的方法或變量,應使用dojo.global:
dojo.provide("my.module");dojo.global.myOnClick = function(){ ... }
關於定製壓縮Build的注意事項
selectorEngine

值得注意的是acme 查詢引擎(acme query engine) 默認將再也不包含在壓縮後的dojo.js中,所以在dojo/query 或 Dojo base 加載時會致使額外的網絡請求以獲取。若是但願將acme query engine包含到壓縮後的dojo.js中,能夠在build profile中定義selectorEngine: "acme" 或直接在build命令行中添加selectorEngine=acme 參數,也能夠參考Dojo 1.7.1中自帶的standard.profile.js

關於更多selector engines的信息,請參考dojo/query documentation.
dijit/_base

之前的版本中,在壓縮時dijit/_base 會自動導入其所依賴的dijit/_Widget模塊. 在1.7版本中dijit/_Widget模塊只會在非AMD(向後兼容)模式中被導入。所以Dojo構建器再也不認爲dijit/_base依賴於dijit/_Widget。

爲了不可能額外的網絡請求,建議在上述狀況下將dijit/_Widget做爲顯示的依賴添加到build profile中。

跨域模式中使用本地模塊 Dojo 1.7 有一個侷限性,在非AMD向後兼容的模式下,跨域訪問即dojo.js是從第三方域加載的輕快下,Dojo 沒法加載使用非AMD即dojo.require形式的模塊。目前惟一的辦法是將本地模塊改寫成新的AMD語法,或者在這種狀況下避免使用跨域訪問,請參見 defect #14459. debugAtAllCosts 在1.7版本中,djConfig 中的debugAtAllCosts 參數將沒法使用,可使用以下相應的方式替換: 將應用轉成新的AMD語法並使用異步加載模式(async:true), 全部經過標準AMD加載的模塊即可進行調試 經過運行壓縮build, 將全部非AMD模塊轉成新的AMD 語法。 注意:在將應用轉換正最新的AMD語法時可能會須要額外的時間例如來移除舊的API - dojo.getObject 等,儘管這可能會比直接壓縮一個build費時,但將能得到1.7帶來的全面改進特性。
相關文章
相關標籤/搜索