<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Dojo &#8211; Sanmao的幸福(?)生活</title>
	<atom:link href="/articles/tag/dojo/feed" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description>Domino/Notes技术、Ubuntu、TV Game</description>
	<lastBuildDate>Wed, 15 Apr 2009 06:58:51 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.2.2</generator>
	<item>
		<title>使用 Dojo 的打包工具</title>
		<link>/articles/use-dojo-custom-build.html</link>
				<comments>/articles/use-dojo-custom-build.html#respond</comments>
				<pubDate>Wed, 15 Apr 2009 06:58:51 +0000</pubDate>
		<dc:creator><![CDATA[Sanmao]]></dc:creator>
				<category><![CDATA[Dojo]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[custom]]></category>

		<guid isPermaLink="false">http://sanmao.yo2.cn/?p=638081</guid>
				<description><![CDATA[Dojo 一般的发布包是把各个组件单独存放在各自的文件中的，比如按钮控件对应 /dijit/form/Butt [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>Dojo 一般的发布包是把各个组件单独存放在各自的文件中的，比如按钮控件对应 /dijit/form/Button.js，这样做对于代码的维护和开发是比较有利的。但如果放在生产环境，每个使用  Dojo 的页面将产生数十个单独的 HTTP 请求，则会影响到应用的性能。针对这个问题，Dojo 提供了一个自定义打包工具，可以将自己常用的组件合并到一个文件中，还能压缩 js、css 文件的大小，以提高性能。</p>
<p>使用此工具需要准备：</p>
<ul>
<li>Java 运行环境</li>
<li>Dojo 的源代码包（以 -src 结尾）</li>
</ul>
<p>接下来是创建 Profile。在 util/buildscripts/profiles 目录下，可以看到一些样例 profile，我们可以参考已有的创建一个：</p>
<blockquote>
<pre>dependencies =<span class="br0">{</span><br class="geshibr" />    layers:  <span class="br0">[</span>
        <span class="br0">{</span> //第一部分
        <span class="kw3">name</span>: <span class="st0">"mydojo.js"</span>,

dependencies: <span class="br0">[ //第二部分</span>
            <span class="st0">"dijit.Button"</span>,
            <span class="st0">"dojox.wire.Wire"</span>,
            <span class="st0">"dojox.wire.XmlWire"</span>,
            <span class="st0">"explosive.space.Modulator"</span>
        <span class="br0">]</span>
        <span class="br0">}</span>
    <span class="br0">]</span>,<br class="geshibr" />    prefixes: <span class="br0">[</span> //第三部分

      <span class="br0">[</span> <span class="st0">"dijit"</span>, <span class="st0">"../dijit"</span> <span class="br0">]</span>,
        <span class="br0">[</span> <span class="st0">"dojox"</span>, <span class="st0">"../dojox"</span> <span class="br0">]</span>,
        <span class="br0">[</span> <span class="st0">"explosive"</span>, <span class="st0">"../../explosive"</span> <span class="br0">]</span>
    <span class="br0">]</span><br class="geshibr" /><span class="br0">}</span>;</pre>
</blockquote>
<p>下面说明一下各个主要部分的作用：</p>
<ol>
<li>指定打包最后生成的文件名</li>
<li>列举都有哪些组件将被打包到此文件</li>
<li>各源文件所在的路径，比如 dijit 开头的包，都放在 ../dijit 目录下</li>
</ol>
<p>然后，运行打包脚本，通过 profile 参数指定配置文件：</p>
<blockquote><p>$ <span class="kw3">cd</span> util/buildscripts<br />
$ build.sh <span class="re2">profile=</span>foo <span class="re2">action=</span>release</p></blockquote>
<p>最后，将打好包的文件替代原始的 Dojo 文件，加入到页面引用中就行了。</p>
<p>参考资料：<a href="http://www.dojotoolkit.org/book/dojo-book-0-9/part-4-meta-dojo/package-system-and-custom-builds" target="_blank">The Package System and Custom Builds</a></p>
]]></content:encoded>
							<wfw:commentRss>/articles/use-dojo-custom-build.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>扩展标准的 Dijit 控件</title>
		<link>/articles/extending-a-dijit.html</link>
				<comments>/articles/extending-a-dijit.html#respond</comments>
				<pubDate>Tue, 14 Apr 2009 03:24:46 +0000</pubDate>
		<dc:creator><![CDATA[Sanmao]]></dc:creator>
				<category><![CDATA[Dojo]]></category>
		<category><![CDATA[dijit]]></category>
		<category><![CDATA[extend]]></category>

		<guid isPermaLink="false">http://sanmao.yo2.cn/?p=638065</guid>
				<description><![CDATA[标准的 Dojo 包中提供了很多 Dijit 控件，提供了各种丰富的功能。但是用户需求是多种多样的，总有些标准 [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>标准的 Dojo 包中提供了很多 Dijit 控件，提供了各种丰富的功能。但是用户需求是多种多样的，总有些标准控件没有实现的部分。还好 Dojo 提供了多种扩展机制，以适应不同的场景。</p>
<p>接下来以为 dijit.Dialog 扩展一个简单的 setTitle 方法为例，介绍一下三种不同的方式。</p>
<p>1、使用 dojo.extend 直接修改 Dialog 的原型</p>
<blockquote>
<pre>dojo.<span style="color: #660066">require</span><span style="color: #009900">(</span><span style="color: #3366cc">"dijit.Dialog"</span><span style="color: #009900">)</span>;
dojo.<span style="color: #660066">extend</span><span style="color: #009900">(</span>dijit.<span style="color: #660066">Dialog</span><span style="color: #339933">,</span><span style="color: #009900">{</span>
     setTitle<span style="color: #339933">:</span> <span style="font-weight: bold;color: #003366">function</span><span style="color: #009900">(</span><span style="color: #006600;font-style: italic">/*string*/</span>title<span style="color: #009900">)</span><span style="color: #009900">{</span>
         <span style="font-weight: bold;color: #000066">this</span>.<span style="color: #660066">titleNode</span>.<span style="color: #660066">innerHTML</span> <span style="color: #339933">=</span> title || <span style="color: #3366cc">""</span>;
     <span style="color: #009900">}</span>
<span style="color: #009900">}</span><span style="color: #009900">)</span>;</pre>
</blockquote>
<p>2、使用 dojo.mixin 将 setTitle 添加到某个指定的 Dialog 实例</p>
<blockquote>
<pre>dojo.<span style="color: #660066">require</span><span style="color: #009900">(</span><span style="color: #3366cc">"dijit.Dialog"</span><span style="color: #009900">)</span>;
dojo.<span style="color: #660066">addOnLoad</span><span style="color: #009900">(</span><span style="font-weight: bold;color: #003366">function</span><span style="color: #009900">(</span><span style="color: #009900">)</span><span style="color: #009900">{</span>
     <span style="font-weight: bold;color: #003366">var</span> dialog <span style="color: #339933">=</span> <span style="font-weight: bold;color: #003366">new</span> dijit.<span style="color: #660066">Dialog</span><span style="color: #009900">(</span><span style="color: #009900">{</span> title<span style="color: #339933">:</span><span style="color: #3366cc">"test"</span> <span style="color: #009900">}</span><span style="color: #009900">)</span>;
     dialog.<span style="color: #660066">startup</span><span style="color: #009900">(</span><span style="color: #009900">)</span>;
     dojo.<span style="color: #660066">mixin</span><span style="color: #009900">(</span>dialog<span style="color: #339933">,</span><span style="color: #009900">{</span>
          setTitle<span style="color: #339933">:</span><span style="font-weight: bold;color: #003366">function</span><span style="color: #009900">(</span>title<span style="color: #009900">)</span><span style="color: #009900">{</span>
               <span style="font-weight: bold;color: #000066">this</span>.<span style="color: #660066">titleNode</span>.<span style="color: #660066">innerHTML</span> <span style="color: #339933">=</span> title || <span style="color: #3366cc">""</span>;
          <span style="color: #009900">}</span>
     <span style="color: #009900">}</span><span style="color: #009900">)</span>;
<span style="color: #009900">}</span><span style="color: #009900">)</span>;</pre>
</blockquote>
<p>3、使用 dojo.declare 定义一个继承自 Dialog 的子类</p>
<blockquote>
<pre>dojo.<span style="color: #660066">provide</span><span style="color: #009900">(</span><span style="color: #3366cc">"my.Dialog"</span><span style="color: #009900">)</span>;
dojo.<span style="color: #660066">require</span><span style="color: #009900">(</span><span style="color: #3366cc">"dijit.Dialog"</span><span style="color: #009900">)</span>;
dojo.<span style="color: #660066">declare</span><span style="color: #009900">(</span><span style="color: #3366cc">"my.Dialog"</span><span style="color: #339933">,</span>dijit.<span style="color: #660066">Dialog</span><span style="color: #339933">,</span><span style="color: #009900">{</span>
     setTitle<span style="color: #339933">:</span><span style="font-weight: bold;color: #003366">function</span><span style="color: #009900">(</span>title<span style="color: #009900">)</span><span style="color: #009900">{</span>
          <span style="font-weight: bold;color: #000066">this</span>.<span style="color: #660066">titleNode</span>.<span style="color: #660066">innerHTML</span> <span style="color: #339933">=</span> title || <span style="color: #3366cc">""</span>;
     <span style="color: #009900">}</span>
<span style="color: #009900">}</span><span style="color: #009900">)</span>;</pre>
</blockquote>
<p>在我的项目中也采用了这种方法，原因如下：一是它保留了原有 Dialog，没有对其进行修改；二是可以通过 inherited 实现往现有的方法中增加代码。例如为 show 方法增加一个判断条件：</p>
<blockquote>
<pre>dojo.<span style="color: #660066">require</span><span style="color: #009900">(</span><span style="color: #3366cc">"dijit.Dialog"</span><span style="color: #009900">)</span>;
dojo.<span style="color: #660066">declare</span><span style="color: #009900">(</span><span style="color: #3366cc">"my.Dialog"</span><span style="color: #339933">,</span>dijit.<span style="color: #660066">Dialog</span><span style="color: #339933">,</span><span style="color: #009900">{</span>
     canBeShown<span style="color: #339933">:</span> <span style="font-weight: bold;color: #003366">true</span><span style="color: #339933">,</span>
     <span style="color: #006600;font-style: italic">// extend the default show() method</span>
     show<span style="color: #339933">:</span><span style="font-weight: bold;color: #003366">function</span><span style="color: #009900">(</span><span style="color: #009900">)</span><span style="color: #009900">{</span>
            <span style="font-weight: bold;color: #000066">if</span><span style="color: #009900">(</span><span style="font-weight: bold;color: #000066">this</span>.<span style="color: #660066">canBeShown</span><span style="color: #009900">)</span><span style="color: #009900">{</span>
                    <span style="font-weight: bold;color: #000066">this</span>.<span style="color: #660066">inherited</span><span style="color: #009900">(</span>arguments<span style="color: #009900">)</span>;
            <span style="color: #009900">}</span>
     <span style="color: #009900">}</span>
<span style="color: #009900">}</span><span style="color: #009900">)</span>;</pre>
</blockquote>
<p>参考资料：<a href="http://dojocampus.org/content/2008/02/25/mucking-dijit/" target="_blank">Mucking Dijit</a></p>
]]></content:encoded>
							<wfw:commentRss>/articles/extending-a-dijit.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
	</channel>
</rss>
