You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by ta...@apache.org on 2017/05/18 07:36:16 UTC
[02/51] [abbrv] [partial] incubator-weex-site git commit: Site
updated: 2017-05-18 15:35:46
http://git-wip-us.apache.org/repos/asf/incubator-weex-site/blob/d332a30e/cn/v-0.10/advanced/create-a-weex-project.html
----------------------------------------------------------------------
diff --git a/cn/v-0.10/advanced/create-a-weex-project.html b/cn/v-0.10/advanced/create-a-weex-project.html
deleted file mode 100644
index 8081790..0000000
--- a/cn/v-0.10/advanced/create-a-weex-project.html
+++ /dev/null
@@ -1,513 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
-
- <title>如何创建一个 Weex 项目 | Weex</title>
- <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
- <meta name="description" content="如何创建一个 Weex 项目对于前端开发者来说开发一个 app 是不容易的,既然 Weex 能以 web 的开发体验构建高性能、可扩展的 native 应用,那我们怎么利用 Weex 简单高效的开发一个 native 应用呢?Weex 替你考虑了这件事。在本章中,我们将学习如何使用 Weexpack 工具快速生成一个全新的 Weex 项目。 根据你的操作系统的不同,步骤也略有差异,如果你从未接触过">
-<meta property="og:type" content="website">
-<meta property="og:title" content="如何创建一个 Weex 项目">
-<meta property="og:url" content="https://weex-project.io/cn/v-0.10/advanced/create-a-weex-project.html">
-<meta property="og:site_name" content="Weex">
-<meta property="og:description" content="如何创建一个 Weex 项目对于前端开发者来说开发一个 app 是不容易的,既然 Weex 能以 web 的开发体验构建高性能、可扩展的 native 应用,那我们怎么利用 Weex 简单高效的开发一个 native 应用呢?Weex 替你考虑了这件事。在本章中,我们将学习如何使用 Weexpack 工具快速生成一个全新的 Weex 项目。 根据你的操作系统的不同,步骤也略有差异,如果你从未接触过">
-<meta property="og:image" content="https://img.alicdn.com/tps/TB1jLx4OFXXXXaoXFXXXXXXXXXX-212-33.png">
-<meta property="og:image" content="https://gw.alicdn.com/tps/TB1VulhOFXXXXcPXFXXXXXXXXXX-828-686.png">
-<meta property="og:image" content="https://img.alicdn.com/tps/TB1CBdgOFXXXXXnXVXXXXXXXXXX-661-392.jpg">
-<meta property="og:updated_time" content="2017-04-28T02:36:21.000Z">
-<meta name="twitter:card" content="summary">
-<meta name="twitter:title" content="如何创建一个 Weex 项目">
-<meta name="twitter:description" content="如何创建一个 Weex 项目对于前端开发者来说开发一个 app 是不容易的,既然 Weex 能以 web 的开发体验构建高性能、可扩展的 native 应用,那我们怎么利用 Weex 简单高效的开发一个 native 应用呢?Weex 替你考虑了这件事。在本章中,我们将学习如何使用 Weexpack 工具快速生成一个全新的 Weex 项目。 根据你的操作系统的不同,步骤也略有差异,如果你从未接触过">
-<meta name="twitter:image" content="https://img.alicdn.com/tps/TB1jLx4OFXXXXaoXFXXXXXXXXXX-212-33.png">
-
- <link rel="alternate" href="/atom.xml" title="Weex" type="application/atom+xml">
-
-
- <link rel="icon" href="//gw.alicdn.com/tps/TB1XNqxPXXXXXcSXVXXXXXXXXXX-64-63.png">
-
-
- <link href="//fonts.googleapis.com/css?family=Source+Code+Pro" rel="stylesheet" type="text/css">
-
- <link rel="stylesheet" href="/css/style.css">
- <link rel="stylesheet" href="/css/swiper.min.css">
-</head>
-
-<body id="advanced" class="lang-cn">
-
- <script>
- window.PAGE_TYPE = "advanced";
- window.ROOT = "/"
- </script>
- <header id="header">
- <div class="navbar">
- <a id="logo" href="/cn/">
- <img src="//img.alicdn.com/tps/TB1zBLaPXXXXXXeXXXXXXXXXXXX-121-59.svg" />
- </a>
- <div class="main-nav">
- <ul class="links">
- <li><a href="/cn/guide">教程</a></li>
- <li><a href="/cn/references">手册</a></li>
- <li class="dropdown">
- <a href="javascript:;">参考</a>
- <ul class="dropdown-menu subnav">
- <li>
- <a href="/cn/faq.html">FAQ</a>
- </li>
- <li>
- <a href="/cn/releasenote.html">版本说明</a>
- </li>
- </ul>
- </li>
- <li class="dropdown">
- <a href="javascript:;">工具和服务</a>
- <ul class="dropdown-menu subnav">
- <li>
- <a href="/cn/playground.html">Playground</a>
- </li>
- <li>
- <a href="/cn/guide/tools/toolkit.html">Weex-toolkit</a>
- </li>
- <li>
- <a href="http://dotwe.org" target="_blank">Code Snippets</a>
- </li>
- <li>
- <a href="https://market.dotwe.org" target="_blank">Market</a>
- </li>
- </ul>
- </li>
- </ul>
- <ul class="info">
- <li><a href="https://github.com/apache/incubator-weex/" target="_blank"><span class="btn-github iconfont icon-github"></span></a></li>
- </ul>
- <ul class="tools">
- <li>
- <div class="search">
- <form id="search-form" class="search-form"> <!-- 搜索框相关 -->
- <input type="text" id="search-input-header" name="q" results="0" class="form-control search-input" autocomplete="off" autocorrect="off"/>
- <span class="iconfont icon-search"></span>
- </form>
- <div class="results-panel">
- </div>
-</div>
- </li>
- <li>
- <div class="dropdown select-lang">
- <a href="javascript:;" class="dropdown-toggle">
- Language
- <span class="caret"></span>
- </a>
- <ul class="dropdown-menu pick-lang">
- <li>
- <a href="/v-0.10/advanced/create-a-weex-project.html" data-lang="en">English</a>
- </li>
- <li>
- <a href="/cn/v-0.10/advanced/create-a-weex-project.html" data-lang="zh-cn">中文</a>
- </li>
- </ul>
- </div>
- </li>
- <!--<li></li>-->
- </ul>
- </div>
- </div>
- <div id="mobile-nav">
- <a id="logo" href="/cn/">
- <img src="//img.alicdn.com/tps/TB1zBLaPXXXXXXeXXXXXXXXXXXX-121-59.svg" />
- </a>
- <a class="btn-menu"><span class="iconfont icon-nav"></span></a>
- </div>
-</header>
-
- <div id="sidebar" class="">
- <div class="sidebar-menu">
-
- <ul class="main-nav">
- <li>
- <div class="search">
- <form id="search-form" class="search-form"> <!-- 搜索框相关 -->
- <input type="text" id="search-input-sidebar" name="q" results="0" class="form-control search-input" autocomplete="off" autocorrect="off"/>
- <span class="iconfont icon-search"></span>
- </form>
- <div class="results-panel">
- </div>
-</div>
- </li>
- <li>
- <a class="" href="/cn/guide">
- 教程
- </a>
- </li>
- <li>
- <a class="" href="/cn/references">
- 手册
- </a>
- </li>
- <li>
- <a href="/cn/faq.html">
- FAQ
- </a>
- </li>
- <li>
- <p>工具和服务</p>
- <ul class="subnav">
- <li>
- <a href="/cn/playground.html">Playground</a>
- </li>
- <li>
- <a href="/cn/guide/tools/devtools.html">Devtools</a>
- </li>
- <li>
- <a href="/cn/guide/tools/weexpack.html">Weexpack</a>
- </li>
- <li>
- <a href="http://dotwe.org" target="_blank">Snippets</a>
- </li>
- <li>
- <a href="https://market.dotwe.org" target="_blank">Market</a>
- </li>
- </ul>
- </li>
- <li>
- <a href="https://github.com/apache/incubator-weex/" target="_blank">
- GitHub
- </a>
- </li>
- </ul>
-
- <a class="btn-close-sidebar iconfont icon-close"></a>
- </div>
-</div>
-
- <div class="article-wrapper page-layout">
- <div class="doc-nav">
-
-
-
-<div class="doc-nav-version">
- <select class="versionBtn" stype="/cn/advanced">
-
- <option value="2v">v2.x</option>
- <option value="1v" selected>v1.x</option>
-
- </select>
-</div>
-<div class="summary">
- <h2 class="part-title">
-
- 高阶知识
-
- </h2>
- <ul class="doc-summary">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/index.html" class="sidebar-link ">Weex 工作原理</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/how-data-binding-works.html" class="sidebar-link ">数据绑定原理</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/create-a-weex-project.html" class="sidebar-link current ">如何创建一个 Weex 项目</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/integrate-to-android.html" class="sidebar-link ">集成到 Android</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/integrate-to-ios.html" class="sidebar-link ">集成到 iOS</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/integrate-to-html5.html" class="sidebar-link ">集成到 web</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/customize-a-native-component.html" class="sidebar-link ">自定义 native 组件</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/cuszomize-native-apis.html" class="sidebar-link ">自定义 native API</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/extend-to-android.html" class="sidebar-link ">Android 扩展</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/extend-to-ios.html" class="sidebar-link ">iOS 扩展</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/extend-to-html5.html" class="sidebar-link ">weex-html5 扩展</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/integrate-devtools-to-android.html" class="sidebar-link ">集成 Devtools 到 Android</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/integrate-devtools-to-ios.html" class="sidebar-link ">集成 Devtools 到 iOS</a></h3>
-
- </li>
-
-
- </ul>
-</div>
- </div>
-
-
-<article class="article article-type-advanced">
- <div class="article-entry" itemprop="articleBody">
- <header class="article-header">
-
-
- <h1 class="article-title" itemprop="name">
- 如何创建一个 Weex 项目
- </h1>
-
-
- <time class="article-date" datetime="2017-04-28T02:36:21.000Z">Updated time: 28/04/2017</time>
-</header>
- <h1 id="如何创建一个-Weex-项目"><a href="#如何创建一个-Weex-项目" class="headerlink" title="如何创建一个 Weex 项目"></a>如何创建一个 Weex 项目</h1><p>对于前端开发者来说开发一个 app 是不容易的,既然 Weex 能以 web 的开发体验构建高性能、可扩展的 native 应用,那我们怎么利用 Weex 简单高效的开发一个 native 应用呢?Weex 替你考虑了这件事。在本章中,我们将学习如何使用 Weexpack 工具快速生成一个全新的 Weex 项目。</p>
-<p>根据你的操作系统的不同,步骤也略有差异,如果你从未接触过 native 开发,请慢慢来,遇到问题随时查阅 <a href="../faq.md">FAQ</a>。</p>
-<p>首先,不论任何平台,我们都需要 node.js 和 Weexpack。在本节中,默认你已经安装好了 node.js 和 npm,如有疑问,可参考上一章 <a href="../guide/develop-on-your-local-machine.html">如何在本地开发 Weex 页面</a>。</p>
-<p>Weexpack 是 Weex 新一代的工程开发套件,它允许开发者通过简单的命令,创建 weex 工程项目,将项目运行在不同的开发平台上。未来,我们考虑会将其集成在 weex-toolkits 上,但目前仍需要单独安装。好在安装 Weexpack 非常简单,可以直接使用 npm 安装:</p>
-<figure class="highlight bash"><table><tr><td class="code"><pre><div class="line">npm install weexpack -g</div></pre></td></tr></table></figure>
-<p>或者用 cnpm:</p>
-<figure class="highlight bash"><table><tr><td class="code"><pre><div class="line">cnpm install weexpack -g</div></pre></td></tr></table></figure>
-<p>接下来的步骤会有一些复杂和区别,根据开发平台的不同,我们提供了快速导航便于阅读:</p>
-<ul>
-<li><a href="#ios">iOS</a></li>
-<li><a href="#android">Android</a></li>
-</ul>
-<h2 id="iOS"><a href="#iOS" class="headerlink" title="iOS"></a>iOS</h2><p>Mac 是唯一可以开发 iOS 应用的平台,因此创建 iOS 项目只支持 mac。对于 iOS,你需要安装 <a href="https://developer.apple.com/xcode/" target="_blank" rel="external">Xcode</a> 和 <a href="https://guides.cocoapods.org/using/getting-started.html" target="_blank" rel="external">CocoaPods</a> 。</p>
-<p>安装 Xcode 最简单的方法是到 <a href="https://itunes.apple.com/us/app/xcode/id497799835?mt=12" target="_blank" rel="external">Mac App Store</a>。Xcode 体积较大,下载请耐心等待。</p>
-<p>安装好 Xcode 后,你需要运行 Xcode,使 Xcode 自动安装开发者工具和确认使用协议。</p>
-<p>之后你还需要安装 <a href="https://guides.cocoapods.org/using/getting-started.html" target="_blank" rel="external">CocoaPods</a> 。CocoaPods 是 Xcode 项目的类库管理工具,可以使用如下命令安装:</p>
-<figure class="highlight bash"><table><tr><td class="code"><pre><div class="line">$ sudo gem install cocoapods</div></pre></td></tr></table></figure>
-<p>如果执行该命令无反应,很可能是 gem source 问题,你可以切换为淘宝 gem source:</p>
-<figure class="highlight bash"><table><tr><td class="code"><pre><div class="line">$ gem sources --remove https://rubygems.org/</div><div class="line">$ gem sources <span class="_">-a</span> https://ruby.taobao.org/</div><div class="line">$ sudo gem install cocoapods</div></pre></td></tr></table></figure>
-<p>如有问题,可参考 <a href="https://guides.cocoapods.org/using/getting-started.html" target="_blank" rel="external">CocoaPods 官方文档</a></p>
-<h3 id="创建项目"><a href="#创建项目" class="headerlink" title="创建项目"></a>创建项目</h3><p>然后,就可以使用 weexpack 创建 weex 工程了:</p>
-<figure class="highlight bash"><table><tr><td class="code"><pre><div class="line">$ weexpack init appName</div></pre></td></tr></table></figure>
-<p>weexpack 会自动新建以 appName 命名的目录,并将项目模板拉取到该目录。</p>
-<p>最终形成如下目录结构:</p>
-<figure class="highlight bash"><table><tr><td class="code"><pre><div class="line">-> /appName</div><div class="line">.</div><div class="line">|—— .gitignore</div><div class="line">|—— README.md</div><div class="line">|—— package.json</div><div class="line">|-- android.config.json</div><div class="line">|-- ios.config.json</div><div class="line">|—— webpack.config.js</div><div class="line">|—— /src</div><div class="line">| |—— index.we</div><div class="line">|—— /html5</div><div class="line">| |—— index.html</div><div class="line">|—— /ios</div><div class="line">| |—— /playground</div><div class="line">| |—— /sdk</div><div class="line">| |—— /WXDevtool</div><div class="line">|—— /android</div><div class="line">| |—— /playground</div><div class="line">| |—— /appframework</div></pre></td></tr></table></figure>
-<p>其中:</p>
-<ul>
-<li><code>webpack.config.js</code> 是 webpack 配置文件,用于生成 <code>.we</code> 文件的 JSBunlde</li>
-<li><code>ios.config.json</code> 是 iOS 项目配置文件</li>
-<li><code>android.config.json</code> 是 Android 项目配置文件</li>
-<li><code>/src</code> 目录放置 Weex 页面</li>
-<li><code>/html5</code> 是 H5 端入口文件</li>
-<li><code>/ios</code> 放置 iOS 项目</li>
-<li><code>/android</code> 放置 Android 项目</li>
-</ul>
-<p>紧接着,进入目录,并且安装依赖:</p>
-<figure class="highlight bash"><table><tr><td class="code"><pre><div class="line">$ <span class="built_in">cd</span> appName && npm install</div></pre></td></tr></table></figure>
-<p>至此,项目模版创建完成,接下来我们可以自定义我们的 APP 信息并打包运行。</p>
-<h3 id="运行与打包"><a href="#运行与打包" class="headerlink" title="运行与打包"></a>运行与打包</h3><p>如果一切正常,你可以使用 weexpack 打包或模拟器运行了:</p>
-<p>模拟器运行</p>
-<figure class="highlight bash"><table><tr><td class="code"><pre><div class="line">$ weexpack run ios</div></pre></td></tr></table></figure>
-<p>构建 ipa 包:</p>
-<figure class="highlight bash"><table><tr><td class="code"><pre><div class="line">$ weexpack build ios</div></pre></td></tr></table></figure>
-<p>构建包的过程中,将会提示让您输入 CodeSign(证书)、Profile(provisioning profile)、AppId,只有输入真实的这些信息才能成功打包。 其余如AppName,和入口 weex bundle 文件可以编辑项目目录下的 <code>ios.config.json</code> 配置。 打完包成功之后,可以在 <code>/playground/build/ipa_build/</code> 目录下获取 ipa 文件。</p>
-<p>注:证书需要预先安装到 keychain 中,在 keychain 中点击右键获取证书 id(证书名称)、provisioning profile 文件(*mobileprovision)需要获取 UUID,进入目录可以看到 mobileprovision_UUID.sh 文件,此文件可以获取到 UUID。</p>
-<p>mobileprovision_UUID.sh 用法如下:</p>
-<figure class="highlight bash"><table><tr><td class="code"><pre><div class="line">$ ./mobileprovision_UUID.sh *mobileprovision</div></pre></td></tr></table></figure>
-<p>参数(*mobileprovision)为 provisioning profile 文件路径</p>
-<p><strong> 注:run 与 build 部分涉及 pod 的依赖安装问题。</strong></p>
-<ul>
-<li>首先要安装 cocoapods ,具体安装步骤可查看<a href="https://cocoapods.org/" target="_blank" rel="external">这里</a>,建议安装 0.39.0 版本。</li>
-<li><p>为了加快 CLI 执行速度,weexpack 创建的工程默认安装了需要的依赖库。但是命令执行依然会更新需要升级的依赖库。</p>
-<ul>
-<li>如果出现这种错误提示 <code>unable to find a specification for 'WeexSDK'</code> 这种错误,说明你本地没有更新 cocoapods master 仓库,运行 <code>pod repo update</code> ,此时运行 <code>pod search WeexSDK</code>:</li>
-</ul>
-<p><img src="https://img.alicdn.com/tps/TB1jLx4OFXXXXaoXFXXXXXXXXXX-212-33.png" alt=""> </p>
-<p>说明 master repo 更新成功。以上是以 <code>WeexSDK</code> 为例,其他库类似。</p>
-<ul>
-<li>如果出现这种错误 <code>error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.</code> 进入 playground 目录(podfile 文件所在目录)按提示执行。</li>
-</ul>
-<p>更多 pod 使用细节请移步<a href="https://cocoapods.org/" target="_blank" rel="external">cocoapods</a></p>
-</li>
-<li><p>mobileprovision,参数(*mobileprovision)为 provisioning profile 文件路径。</p>
-</li>
-</ul>
-<hr>
-<h2 id="Android"><a href="#Android" class="headerlink" title="Android"></a>Android</h2><p>在 Mac 平台开发 Android 首先需要下载 <a href="https://developer.android.com/studio/install.html" target="_blank" rel="external">Android Studio</a>(你可能需要翻墙才能访问)。<a href="https://developer.android.com/studio/install.html" target="_blank" rel="external">Android Studio</a> 为我们提供了 Android SDK 及 AVD(模拟器)以便我们快速运行 Android 项目。</p>
-<p>下载完成后运行 Android Studio,任意新建一个 Android 项目,在第二步中选择 <strong>Android 5.1</strong>,然后点击 next 完成项目创建,如图所示:</p>
-<p><img src="https://gw.alicdn.com/tps/TB1VulhOFXXXXcPXFXXXXXXXXXX-828-686.png" alt="android"> </p>
-<p>待 Android Studio 打开后,在顶部菜单栏选择 Tools -> Android -> AVD Manager,安装 Android 模拟器:</p>
-<p><img src="https://img.alicdn.com/tps/TB1CBdgOFXXXXXnXVXXXXXXXXXX-661-392.jpg" alt="android"></p>
-<p>之后,打开模拟器运行 Android。</p>
-<p><strong>注意:</strong></p>
-<ol>
-<li>必须保持模拟器运行。</li>
-<li>保证 Android build-tool 的版本为 23.0。【可以在 Android Studio 的 SDK Manager 里查看是否已安装这个版本,如果没有可选择安装这一版本】。</li>
-</ol>
-<h3 id="配置环境变量"><a href="#配置环境变量" class="headerlink" title="配置环境变量"></a>配置环境变量</h3><p>因为 Android Studio 安装的 SDK 不会自动配置环境变量(你自己安装的 SDK 同样不会)。所以需要您自己手动配置 Android_HOME 环境变量和 PATH </p>
-<p>如果是 Android Studio 安装的 SDK 安装路径可已在 SDK manager 里找到(打开 SDK manager 的方式请参照图2)</p>
-<p>Windows 下请参照 <a href="http://jingyan.baidu.com/article/09ea3ede1b4df6c0aede39ab.html" target="_blank" rel="external">window 下如何设置 ANDROID 环境变量</a></p>
-<p>Linux/Mac 下只需编辑 <code>.bash_profile</code> 增加 PATH 即可:</p>
-<figure class="highlight bash"><table><tr><td class="code"><pre><div class="line">vim ~/.bash_profile</div></pre></td></tr></table></figure>
-<p>然后添加下列代码进去(路径替换为你的真实路径)</p>
-<figure class="highlight bash"><table><tr><td class="code"><pre><div class="line"><span class="built_in">export</span> ANDROID_HOME=/xxx/Library/Android/sdk</div><div class="line"><span class="built_in">export</span> PATH=<span class="variable">${PATH}</span>:<span class="variable">$ANDROID_HOME</span>/tools:<span class="variable">$ANDROID_HOME</span>/platform-tools:<span class="variable">$ANDROID_HOME</span>/build-tools</div></pre></td></tr></table></figure>
-<p>然后保存退出(:wq)。再执行下列命令:</p>
-<figure class="highlight bash"><table><tr><td class="code"><pre><div class="line"><span class="built_in">source</span> ~/.bash_profile</div></pre></td></tr></table></figure>
-<h3 id="创建项目-1"><a href="#创建项目-1" class="headerlink" title="创建项目"></a>创建项目</h3><p>然后,就可以使用 weexpack 创建 weex 工程了:</p>
-<figure class="highlight bash"><table><tr><td class="code"><pre><div class="line">$ weexpack init appName</div></pre></td></tr></table></figure>
-<p>weexpack 会自动新建以 appName 命名的目录,并将项目模板拉取到该目录。</p>
-<p>最终形成如下目录结构:</p>
-<figure class="highlight bash"><table><tr><td class="code"><pre><div class="line">-> /appName</div><div class="line">.</div><div class="line">|—— .gitignore</div><div class="line">|—— README.md</div><div class="line">|—— package.json</div><div class="line">|-- android.config.json</div><div class="line">|-- ios.config.json</div><div class="line">|—— webpack.config.js</div><div class="line">|—— /src</div><div class="line">| |—— index.we</div><div class="line">|—— /html5</div><div class="line">| |—— index.html</div><div class="line">|—— /ios</div><div class="line">| |—— /playground</div><div class="line">| |—— /sdk</div><div class="line">| |—— /WXDevtool</div><div class="line">|—— /android</div><div class="line">| |—— /playground</div><div class="line">| |—— /appframework</div></pre></td></tr></table></figure>
-<p>其中:</p>
-<ul>
-<li><code>webpack.config.js</code> 是 webpack 配置文件,用于生成 <code>.we</code> 文件的 JSBunlde</li>
-<li><code>ios.config.json</code> 是 iOS 项目配置文件</li>
-<li><code>android.config.json</code> 是 Android 项目配置文件</li>
-<li><code>/src</code> 目录放置 Weex 页面</li>
-<li><code>/html5</code> 是 H5 端入口文件</li>
-<li><code>/ios</code> 放置 iOS 项目</li>
-<li><code>/android</code> 放置 Android 项目</li>
-</ul>
-<p>紧接着,进入目录,并且安装依赖:</p>
-<figure class="highlight bash"><table><tr><td class="code"><pre><div class="line">$ <span class="built_in">cd</span> appName && npm install</div></pre></td></tr></table></figure>
-<p>至此,项目模版创建完成,接下来我们可以自定义我们的 APP 信息并打包运行。</p>
-<h3 id="运行与打包-1"><a href="#运行与打包-1" class="headerlink" title="运行与打包"></a>运行与打包</h3><p>如果一切正常,你可以使用 weexpack 打包或模拟器运行了:</p>
-<p>Android 的打包和构建是一体的 :</p>
-<figure class="highlight bash"><table><tr><td class="code"><pre><div class="line">$ weexpack run android</div></pre></td></tr></table></figure>
-<p>同样的你可以更改项目目录下的android.config.json</p>
-<ul>
-<li><code>AppName</code>: 应用名</li>
-<li><code>AppId</code>: application_id 包名</li>
-<li><code>SplashText</code>: 欢迎页上面的文字</li>
-<li><p><code>WeexBundle</code>: 指定的 weex bundle 文件(支持文件名和 url 的形式)</p>
-<p>指定文件名则以本地文件的方式加载 bundle,指定 url 则以远程的方式加载 JSBundle。如果以本地方式指定 bundle <code>.we</code> 文件请放到 <code>src</code> 目录。</p>
-</li>
-</ul>
-
- </div>
-
-</article>
-</div>
-
- <footer id="footer">
- <div class="row clearfix">
- <div class="dropdown select-lang">
- <a href="javascript:;" class="dropdown-toggle">
- Language
- <span class="caret"></span>
- </a>
- <ul class="dropdown-menu pick-lang">
- <li>
- <a href="/v-0.10/advanced/create-a-weex-project.html" data-lang="en">English</a>
- </li>
- <li>
- <a href="/cn/v-0.10/advanced/create-a-weex-project.html" data-lang="zh-cn">中文</a>
- </li>
- </ul>
- </div>
- </div>
- <div class="disclaimer">
- <div><img src="//gw.alicdn.com/tfs/TB1pTBZQFXXXXX9XXXXXXXXXXXX-794-280.png" width="200px" alt="Apache Incubator"></div>
- <div><span class="title">Disclaimer:</span> Apache Weex is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div>
- <br/>
- </div>
- <hr>
- <div class="row">
- <p> <img src="//gw.alicdn.com/tfs/TB1bg8SQFXXXXcHXXXXXXXXXXXX-85-170.png" height="50px" alt="Apache"><span>Copyright(c) 2017 The Apache Software Foundation. Licensed under the </span> <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a></p>
- </div>
- <div class="row clearfix">
- <div></div>
- </div>
-</footer>
- <div style="display: none;">
- <script src="//s95.cnzz.com/z_stat.php?id=1261496509&web_id=1261496509" language="JavaScript"></script>
-</div>
-
- <script src="/js/reqwest.js"></script>
- <script src="/js/common.js"></script>
-</body>
-</html>
http://git-wip-us.apache.org/repos/asf/incubator-weex-site/blob/d332a30e/cn/v-0.10/advanced/customize-a-native-component.html
----------------------------------------------------------------------
diff --git a/cn/v-0.10/advanced/customize-a-native-component.html b/cn/v-0.10/advanced/customize-a-native-component.html
deleted file mode 100644
index 732fc55..0000000
--- a/cn/v-0.10/advanced/customize-a-native-component.html
+++ /dev/null
@@ -1,469 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
-
- <title>自定义 native 组件 | Weex</title>
- <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
- <meta name="description" content="如何自定义 native 组件?Weex 已经包含了最关键的平台组件,例如 ScrollView, ListView, Text, Imageview 等等。当然,这些组件并不能完全满足你的需求。另外,那些在你的工程中常用的大量原生 UI 组件,可能需要被简单地集合到 Weex 中。幸运的是,通过任意已存在的组件来创建你的自定义组件是一件很方便的事。 Android步骤:1.自定义组件必须继承自">
-<meta property="og:type" content="website">
-<meta property="og:title" content="自定义 native 组件">
-<meta property="og:url" content="https://weex-project.io/cn/v-0.10/advanced/customize-a-native-component.html">
-<meta property="og:site_name" content="Weex">
-<meta property="og:description" content="如何自定义 native 组件?Weex 已经包含了最关键的平台组件,例如 ScrollView, ListView, Text, Imageview 等等。当然,这些组件并不能完全满足你的需求。另外,那些在你的工程中常用的大量原生 UI 组件,可能需要被简单地集合到 Weex 中。幸运的是,通过任意已存在的组件来创建你的自定义组件是一件很方便的事。 Android步骤:1.自定义组件必须继承自">
-<meta property="og:updated_time" content="2017-04-28T02:36:21.000Z">
-<meta name="twitter:card" content="summary">
-<meta name="twitter:title" content="自定义 native 组件">
-<meta name="twitter:description" content="如何自定义 native 组件?Weex 已经包含了最关键的平台组件,例如 ScrollView, ListView, Text, Imageview 等等。当然,这些组件并不能完全满足你的需求。另外,那些在你的工程中常用的大量原生 UI 组件,可能需要被简单地集合到 Weex 中。幸运的是,通过任意已存在的组件来创建你的自定义组件是一件很方便的事。 Android步骤:1.自定义组件必须继承自">
-
- <link rel="alternate" href="/atom.xml" title="Weex" type="application/atom+xml">
-
-
- <link rel="icon" href="//gw.alicdn.com/tps/TB1XNqxPXXXXXcSXVXXXXXXXXXX-64-63.png">
-
-
- <link href="//fonts.googleapis.com/css?family=Source+Code+Pro" rel="stylesheet" type="text/css">
-
- <link rel="stylesheet" href="/css/style.css">
- <link rel="stylesheet" href="/css/swiper.min.css">
-</head>
-
-<body id="advanced" class="lang-cn">
-
- <script>
- window.PAGE_TYPE = "advanced";
- window.ROOT = "/"
- </script>
- <header id="header">
- <div class="navbar">
- <a id="logo" href="/cn/">
- <img src="//img.alicdn.com/tps/TB1zBLaPXXXXXXeXXXXXXXXXXXX-121-59.svg" />
- </a>
- <div class="main-nav">
- <ul class="links">
- <li><a href="/cn/guide">教程</a></li>
- <li><a href="/cn/references">手册</a></li>
- <li class="dropdown">
- <a href="javascript:;">参考</a>
- <ul class="dropdown-menu subnav">
- <li>
- <a href="/cn/faq.html">FAQ</a>
- </li>
- <li>
- <a href="/cn/releasenote.html">版本说明</a>
- </li>
- </ul>
- </li>
- <li class="dropdown">
- <a href="javascript:;">工具和服务</a>
- <ul class="dropdown-menu subnav">
- <li>
- <a href="/cn/playground.html">Playground</a>
- </li>
- <li>
- <a href="/cn/guide/tools/toolkit.html">Weex-toolkit</a>
- </li>
- <li>
- <a href="http://dotwe.org" target="_blank">Code Snippets</a>
- </li>
- <li>
- <a href="https://market.dotwe.org" target="_blank">Market</a>
- </li>
- </ul>
- </li>
- </ul>
- <ul class="info">
- <li><a href="https://github.com/apache/incubator-weex/" target="_blank"><span class="btn-github iconfont icon-github"></span></a></li>
- </ul>
- <ul class="tools">
- <li>
- <div class="search">
- <form id="search-form" class="search-form"> <!-- 搜索框相关 -->
- <input type="text" id="search-input-header" name="q" results="0" class="form-control search-input" autocomplete="off" autocorrect="off"/>
- <span class="iconfont icon-search"></span>
- </form>
- <div class="results-panel">
- </div>
-</div>
- </li>
- <li>
- <div class="dropdown select-lang">
- <a href="javascript:;" class="dropdown-toggle">
- Language
- <span class="caret"></span>
- </a>
- <ul class="dropdown-menu pick-lang">
- <li>
- <a href="/v-0.10/advanced/customize-a-native-component.html" data-lang="en">English</a>
- </li>
- <li>
- <a href="/cn/v-0.10/advanced/customize-a-native-component.html" data-lang="zh-cn">中文</a>
- </li>
- </ul>
- </div>
- </li>
- <!--<li></li>-->
- </ul>
- </div>
- </div>
- <div id="mobile-nav">
- <a id="logo" href="/cn/">
- <img src="//img.alicdn.com/tps/TB1zBLaPXXXXXXeXXXXXXXXXXXX-121-59.svg" />
- </a>
- <a class="btn-menu"><span class="iconfont icon-nav"></span></a>
- </div>
-</header>
-
- <div id="sidebar" class="">
- <div class="sidebar-menu">
-
- <ul class="main-nav">
- <li>
- <div class="search">
- <form id="search-form" class="search-form"> <!-- 搜索框相关 -->
- <input type="text" id="search-input-sidebar" name="q" results="0" class="form-control search-input" autocomplete="off" autocorrect="off"/>
- <span class="iconfont icon-search"></span>
- </form>
- <div class="results-panel">
- </div>
-</div>
- </li>
- <li>
- <a class="" href="/cn/guide">
- 教程
- </a>
- </li>
- <li>
- <a class="" href="/cn/references">
- 手册
- </a>
- </li>
- <li>
- <a href="/cn/faq.html">
- FAQ
- </a>
- </li>
- <li>
- <p>工具和服务</p>
- <ul class="subnav">
- <li>
- <a href="/cn/playground.html">Playground</a>
- </li>
- <li>
- <a href="/cn/guide/tools/devtools.html">Devtools</a>
- </li>
- <li>
- <a href="/cn/guide/tools/weexpack.html">Weexpack</a>
- </li>
- <li>
- <a href="http://dotwe.org" target="_blank">Snippets</a>
- </li>
- <li>
- <a href="https://market.dotwe.org" target="_blank">Market</a>
- </li>
- </ul>
- </li>
- <li>
- <a href="https://github.com/apache/incubator-weex/" target="_blank">
- GitHub
- </a>
- </li>
- </ul>
-
- <a class="btn-close-sidebar iconfont icon-close"></a>
- </div>
-</div>
-
- <div class="article-wrapper page-layout">
- <div class="doc-nav">
-
-
-
-<div class="doc-nav-version">
- <select class="versionBtn" stype="/cn/advanced">
-
- <option value="2v">v2.x</option>
- <option value="1v" selected>v1.x</option>
-
- </select>
-</div>
-<div class="summary">
- <h2 class="part-title">
-
- 高阶知识
-
- </h2>
- <ul class="doc-summary">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/index.html" class="sidebar-link ">Weex 工作原理</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/how-data-binding-works.html" class="sidebar-link ">数据绑定原理</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/create-a-weex-project.html" class="sidebar-link ">如何创建一个 Weex 项目</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/integrate-to-android.html" class="sidebar-link ">集成到 Android</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/integrate-to-ios.html" class="sidebar-link ">集成到 iOS</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/integrate-to-html5.html" class="sidebar-link ">集成到 web</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/customize-a-native-component.html" class="sidebar-link current ">自定义 native 组件</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/cuszomize-native-apis.html" class="sidebar-link ">自定义 native API</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/extend-to-android.html" class="sidebar-link ">Android 扩展</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/extend-to-ios.html" class="sidebar-link ">iOS 扩展</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/extend-to-html5.html" class="sidebar-link ">weex-html5 扩展</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/integrate-devtools-to-android.html" class="sidebar-link ">集成 Devtools 到 Android</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/integrate-devtools-to-ios.html" class="sidebar-link ">集成 Devtools 到 iOS</a></h3>
-
- </li>
-
-
- </ul>
-</div>
- </div>
-
-
-<article class="article article-type-advanced">
- <div class="article-entry" itemprop="articleBody">
- <header class="article-header">
-
-
- <h1 class="article-title" itemprop="name">
- 自定义 native 组件
- </h1>
-
-
- <time class="article-date" datetime="2017-04-28T02:36:21.000Z">Updated time: 28/04/2017</time>
-</header>
- <h1 id="如何自定义-native-组件?"><a href="#如何自定义-native-组件?" class="headerlink" title="如何自定义 native 组件?"></a>如何自定义 native 组件?</h1><p>Weex 已经包含了最关键的平台组件,例如 <code>ScrollView, ListView, Text, Imageview</code> 等等。当然,这些组件并不能完全满足你的需求。另外,那些在你的工程中常用的大量原生 UI 组件,可能需要被简单地集合到 Weex 中。幸运的是,通过任意已存在的组件来创建你的自定义组件是一件很方便的事。</p>
-<h2 id="Android"><a href="#Android" class="headerlink" title="Android"></a>Android</h2><h3 id="步骤:"><a href="#步骤:" class="headerlink" title="步骤:"></a>步骤:</h3><p>1.自定义组件必须继承自 <code>WXComponent</code> 或者 <code>WXContainer</code> ;<br>2.weex SDK 可以识别 @WXComponentProp (name = value(value 是 attr 或者 dsl style));<br>3.方法必须是 <code>public</code> 的;<br>4.组件类不能是一个内部类;<br>5.自定义组件不能被 ProGuard 之类的工具混淆;<br>6.组件方法在 UI 线程被调用,因此不要在里面进行耗时的操作;<br>7.Weex 的参数类型可以是 int, double, float, String, Map, List 和实现了 WXObject 接口的自定义类;</p>
-<h3 id="参考以下例子:"><a href="#参考以下例子:" class="headerlink" title="参考以下例子:"></a>参考以下例子:</h3><figure class="highlight java"><table><tr><td class="code"><pre><div class="line"> `<span class="keyword">package</span> com.taobao.weex.ui.component;</div><div class="line"><span class="comment">// ……</span></div><div class="line"></div><div class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">MyViewComponent</span> <span class="keyword">extends</span> <span class="title">WXComponent</span></span>{</div><div class="line"></div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="title">MyViewComponent</span><span class="params">(WXSDKInstance instance, WXDomObject node, </span></span></div><div class="line"> WXVContainer parent, String instanceId, <span class="keyword">boolean</span> lazy) {
</div><div class="line"> <span class="keyword">super</span>(instance, node, parent, instanceId, lazy);</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="meta">@Override</span></div><div class="line"> <span class="function"><span class="keyword">protected</span> <span class="keyword">void</span> <span class="title">initView</span><span class="params">()</span> </span>{</div><div class="line"> <span class="comment">//<span class="doctag">TODO:</span>your own code ……</span></div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="meta">@Override</span></div><div class="line"> <span class="function"><span class="keyword">public</span> WXFrameLayout <span class="title">getView</span><span class="params">()</span> </span>{</div><div class="line"> <span class="comment">//<span class="doctag">TODO:</span>your own code ………
</span></div><div class="line"> }</div><div class="line"> <span class="meta">@WXComponentProp</span>(name=WXDomPropConstant.WX_ATTR_VALUE)</div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">setMyViewValue</span><span class="params">(String value)</span> </span>{</div><div class="line"> ((TextView)mHost).setText(value);</div><div class="line"> }</div><div class="line"></div><div class="line">}</div></pre></td></tr></table></figure>
-<p>必须注册组件:</p>
-<figure class="highlight java"><table><tr><td class="code"><pre><div class="line">WXSDKEngine.registerComponent(<span class="string">"MyView"</span>, MyViewComponent.class);</div></pre></td></tr></table></figure>
-<h2 id="iOS"><a href="#iOS" class="headerlink" title="iOS"></a>iOS</h2><p>虽然 WeexSDK 中有很多的 native 的 Component,但这有可能并不能满足你的需求。在之前你可能已经写了一些很酷炫 native 的组件,想包装一下,导入到 Weex 中,因此我们提供了让开发者实现自己的 native Component。下面将以 WeexSDK 中已经存在的 Component:<code>image</code> 为例子,介绍一下如何构建一个 native Component。假设你已经了解 iOS 开发</p>
-<h3 id="注册-Component"><a href="#注册-Component" class="headerlink" title="注册 Component"></a>注册 Component</h3><p>注册一个 component 比较简单,调用 <code>WXSDKEngine</code> 中的 <code>registerComponent:withClass:</code> 方法,传入组件的标签名称,还有对应的 class 然后你可以创建一个 <code>WXImageComponent</code> 表示 <code>image</code> 组件的实现。在 <code>.we</code> 文件中,只需要写 <code><image></image></code></p>
-<h3 id="添加属性"><a href="#添加属性" class="headerlink" title="添加属性"></a>添加属性</h3><p>现在我们要做一些让 image component 更加强大的事情。既然作为一个图片的 component,那它应该要有源,给他加上一个 <code>src</code> 的属性,同时给它加上一个 <code>resize</code> 的属性(可以配置的有 <code>contain/cover/stretch</code>)</p>
-<figure class="highlight plain"><table><tr><td class="code"><pre><div class="line">@interface WXImageComponent ()</div><div class="line"></div><div class="line">@property (nonatomic, strong) NSString *imageSrc;</div><div class="line">@property (nonatomic, assign) UIViewContentMode resizeMode;</div><div class="line"></div><div class="line">@end</div></pre></td></tr></table></figure>
-<p>component 中所有的 style,attribute,events 都会被传递到 Component 的初始化方法中,所以,你可以在初始化方法中存储你感兴趣的一些属性值</p>
-<figure class="highlight plain"><table><tr><td class="code"><pre><div class="line">@implementation WXImageComponent</div><div class="line"></div><div class="line">- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance</div><div class="line">{</div><div class="line"> if (self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance]) {</div><div class="line"> _imageSrc = [WXConvert NSString:attributes[@"src"]];</div><div class="line"> _resizeMode = [WXConvert UIViewContentMode:attributes[@"resize"]];</div><div class="line">}</div><div class="line"></div><div class="line"> return self;</div><div class="line">}</div><div class="line"></div><div class="line">@end</div></pre></td></tr></table></figure>
-<p>attribute 中拿到的值的类型都是 <code>id</code>,我们可以用转换方法把它转换到任何值。Weex SDK 提供了一些基础的转换方法,可以参考 <code>WXConvert</code> 类,或者你可以添加自己的转换函数。</p>
-<h3 id="Hooking-渲染生命周期"><a href="#Hooking-渲染生命周期" class="headerlink" title="Hooking 渲染生命周期"></a>Hooking 渲染生命周期</h3><p>native 的 component 是由 Weex 管理的,Weex 创建,布局,渲染,销毁。Weex 的 component 生命周期都是可以 hook 的,你可以在这些生命周期中去做自己的事情。</p>
-<table>
-<thead>
-<tr>
-<th style="text-align:center">方法</th>
-<th>描述</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td style="text-align:center">initWithRef:type:…</td>
-<td>用给定的属性初始化一个component.</td>
-</tr>
-<tr>
-<td style="text-align:center">layoutDidFinish</td>
-<td>在component完成布局时候会调用.</td>
-</tr>
-<tr>
-<td style="text-align:center">loadView</td>
-<td>创建component管理的view.</td>
-</tr>
-<tr>
-<td style="text-align:center">viewWillLoad</td>
-<td>在component的view加载之前会调用.</td>
-</tr>
-<tr>
-<td style="text-align:center">viewDidLoad</td>
-<td>在component的view加载完之后调用.</td>
-</tr>
-<tr>
-<td style="text-align:center">viewWillUnload</td>
-<td>在component的view被释放之前调用.</td>
-</tr>
-<tr>
-<td style="text-align:center">viewDidUnload</td>
-<td>在component的view被释放之后调用.</td>
-</tr>
-<tr>
-<td style="text-align:center">updateStyles:</td>
-<td>在component的style更新时候调用.</td>
-</tr>
-<tr>
-<td style="text-align:center">updateAttributes:</td>
-<td>在component的attribute更新时候调用.</td>
-</tr>
-<tr>
-<td style="text-align:center">addEvent:</td>
-<td>给component添加event的时候调用.</td>
-</tr>
-<tr>
-<td style="text-align:center">removeEvent:</td>
-<td>在event移除的时候调用.</td>
-</tr>
-</tbody>
-</table>
-<p>在 image component 的例子里面,如果我们需要我们自己的 image view 的话,可以复写 <code>loadView</code>这个方法.</p>
-<figure class="highlight plain"><table><tr><td class="code"><pre><div class="line">- (UIView *)loadView</div><div class="line">{</div><div class="line">return [[WXImageView alloc] init];</div><div class="line">}</div></pre></td></tr></table></figure>
-<p>现在我们使用 <code>WXImageView</code> 渲染 <code>image</code> component。<br>作为一个 image component,我们需要拿到服务器图片,而且把它设置进 image view 里. 这个操作可以在 <code>viewDidLoad</code> 方法中做,这个方法是在 view 已经被创建而且加载了时候 Weex SDK 会调用到,而且 <code>viewDidLoad</code> 这个方法是你做额外初始化工作比如改变 content mode(也就是设置resize) 的最好时间.</p>
-<figure class="highlight plain"><table><tr><td class="code"><pre><div class="line">- (void)viewDidLoad</div><div class="line">{</div><div class="line"> UIImageView *imageView = (UIImageView *)self.view;</div><div class="line"> imageView.contentMode = _resizeMode;</div><div class="line"> imageView.userInteractionEnabled = YES;</div><div class="line"> imageView.clipsToBounds = YES;</div><div class="line"> imageView.exclusiveTouch = YES;</div><div class="line"></div><div class="line"> // Do your image fetching and updating logic</div><div class="line">}</div></pre></td></tr></table></figure>
-<p>如果可以改变 image 的 src,也可以 hook <code>updateAttributes:</code> 方法来做属性更新操作,当 <code>updateAttributes:</code> 或者 <code>updateStyles:</code> 被调用的时候, component 的 view 已经加载完成</p>
-<figure class="highlight plain"><table><tr><td class="code"><pre><div class="line">- (void)updateAttributes:(NSDictionary *)attributes</div><div class="line">{</div><div class="line"> if (attributes[@"src"]) {</div><div class="line"> _imageSrc = [WXConvert NSString:attributes[@"src"]];</div><div class="line"> // Do your image updating logic</div><div class="line"> }</div><div class="line"></div><div class="line"> if (attributes[@"resize"]) {</div><div class="line"> _resizeMode = [WXConvert UIViewContentMode:attributes[@"resize"]];</div><div class="line"> self.view.contentMode = _resizeMode;</div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure>
-<p>或许你需要考虑更多的生命周期方法去 Hook,当布局完成时候,像 <code>layoutDidFinish</code>,如果你想了解更多,可以参考一下<code>WXComponent.h</code> 声明的方法。</p>
-<p>现在你可以用在任何 <code>.we</code> 文件里面使用 <code><image></code>,而且可以加上 image 的属性。</p>
-<figure class="highlight html"><table><tr><td class="code"><pre><div class="line"><span class="tag"><<span class="name">image</span> <span class="attr">style</span>=<span class="string">"your-custom-style"</span> <span class="attr">src</span>=<span class="string">"image-remote-source"</span> <span class="attr">resize</span>=<span class="string">"contain/cover/stretch"</span>></span><span class="tag"></<span class="name">image</span>></span></div></pre></td></tr></table></figure>
-
- </div>
-
-</article>
-</div>
-
- <footer id="footer">
- <div class="row clearfix">
- <div class="dropdown select-lang">
- <a href="javascript:;" class="dropdown-toggle">
- Language
- <span class="caret"></span>
- </a>
- <ul class="dropdown-menu pick-lang">
- <li>
- <a href="/v-0.10/advanced/customize-a-native-component.html" data-lang="en">English</a>
- </li>
- <li>
- <a href="/cn/v-0.10/advanced/customize-a-native-component.html" data-lang="zh-cn">中文</a>
- </li>
- </ul>
- </div>
- </div>
- <div class="disclaimer">
- <div><img src="//gw.alicdn.com/tfs/TB1pTBZQFXXXXX9XXXXXXXXXXXX-794-280.png" width="200px" alt="Apache Incubator"></div>
- <div><span class="title">Disclaimer:</span> Apache Weex is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div>
- <br/>
- </div>
- <hr>
- <div class="row">
- <p> <img src="//gw.alicdn.com/tfs/TB1bg8SQFXXXXcHXXXXXXXXXXXX-85-170.png" height="50px" alt="Apache"><span>Copyright(c) 2017 The Apache Software Foundation. Licensed under the </span> <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a></p>
- </div>
- <div class="row clearfix">
- <div></div>
- </div>
-</footer>
- <div style="display: none;">
- <script src="//s95.cnzz.com/z_stat.php?id=1261496509&web_id=1261496509" language="JavaScript"></script>
-</div>
-
- <script src="/js/reqwest.js"></script>
- <script src="/js/common.js"></script>
-</body>
-</html>
http://git-wip-us.apache.org/repos/asf/incubator-weex-site/blob/d332a30e/cn/v-0.10/advanced/cuszomize-native-apis.html
----------------------------------------------------------------------
diff --git a/cn/v-0.10/advanced/cuszomize-native-apis.html b/cn/v-0.10/advanced/cuszomize-native-apis.html
deleted file mode 100644
index 3ed6b9f..0000000
--- a/cn/v-0.10/advanced/cuszomize-native-apis.html
+++ /dev/null
@@ -1,415 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
-
- <title>自定义 native API | Weex</title>
- <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
- <meta name="description" content="如何自定义 native API?Weex 的 SDK 只提供了页面渲染的能力,但是一些其它操作,比如网络请求、图片加载、重定向等功能需要你自己去实现,这个例子讲述了如何用原生代码去扩展 Weex 的功能。 关于 URLHelper 的例子新建一个 WXModulepublic class URLHelperModule extends WXModule&#123; private stat">
-<meta property="og:type" content="website">
-<meta property="og:title" content="自定义 native API">
-<meta property="og:url" content="https://weex-project.io/cn/v-0.10/advanced/cuszomize-native-apis.html">
-<meta property="og:site_name" content="Weex">
-<meta property="og:description" content="如何自定义 native API?Weex 的 SDK 只提供了页面渲染的能力,但是一些其它操作,比如网络请求、图片加载、重定向等功能需要你自己去实现,这个例子讲述了如何用原生代码去扩展 Weex 的功能。 关于 URLHelper 的例子新建一个 WXModulepublic class URLHelperModule extends WXModule&#123; private stat">
-<meta property="og:updated_time" content="2017-04-28T02:36:21.000Z">
-<meta name="twitter:card" content="summary">
-<meta name="twitter:title" content="自定义 native API">
-<meta name="twitter:description" content="如何自定义 native API?Weex 的 SDK 只提供了页面渲染的能力,但是一些其它操作,比如网络请求、图片加载、重定向等功能需要你自己去实现,这个例子讲述了如何用原生代码去扩展 Weex 的功能。 关于 URLHelper 的例子新建一个 WXModulepublic class URLHelperModule extends WXModule&#123; private stat">
-
- <link rel="alternate" href="/atom.xml" title="Weex" type="application/atom+xml">
-
-
- <link rel="icon" href="//gw.alicdn.com/tps/TB1XNqxPXXXXXcSXVXXXXXXXXXX-64-63.png">
-
-
- <link href="//fonts.googleapis.com/css?family=Source+Code+Pro" rel="stylesheet" type="text/css">
-
- <link rel="stylesheet" href="/css/style.css">
- <link rel="stylesheet" href="/css/swiper.min.css">
-</head>
-
-<body id="advanced" class="lang-cn">
-
- <script>
- window.PAGE_TYPE = "advanced";
- window.ROOT = "/"
- </script>
- <header id="header">
- <div class="navbar">
- <a id="logo" href="/cn/">
- <img src="//img.alicdn.com/tps/TB1zBLaPXXXXXXeXXXXXXXXXXXX-121-59.svg" />
- </a>
- <div class="main-nav">
- <ul class="links">
- <li><a href="/cn/guide">教程</a></li>
- <li><a href="/cn/references">手册</a></li>
- <li class="dropdown">
- <a href="javascript:;">参考</a>
- <ul class="dropdown-menu subnav">
- <li>
- <a href="/cn/faq.html">FAQ</a>
- </li>
- <li>
- <a href="/cn/releasenote.html">版本说明</a>
- </li>
- </ul>
- </li>
- <li class="dropdown">
- <a href="javascript:;">工具和服务</a>
- <ul class="dropdown-menu subnav">
- <li>
- <a href="/cn/playground.html">Playground</a>
- </li>
- <li>
- <a href="/cn/guide/tools/toolkit.html">Weex-toolkit</a>
- </li>
- <li>
- <a href="http://dotwe.org" target="_blank">Code Snippets</a>
- </li>
- <li>
- <a href="https://market.dotwe.org" target="_blank">Market</a>
- </li>
- </ul>
- </li>
- </ul>
- <ul class="info">
- <li><a href="https://github.com/apache/incubator-weex/" target="_blank"><span class="btn-github iconfont icon-github"></span></a></li>
- </ul>
- <ul class="tools">
- <li>
- <div class="search">
- <form id="search-form" class="search-form"> <!-- 搜索框相关 -->
- <input type="text" id="search-input-header" name="q" results="0" class="form-control search-input" autocomplete="off" autocorrect="off"/>
- <span class="iconfont icon-search"></span>
- </form>
- <div class="results-panel">
- </div>
-</div>
- </li>
- <li>
- <div class="dropdown select-lang">
- <a href="javascript:;" class="dropdown-toggle">
- Language
- <span class="caret"></span>
- </a>
- <ul class="dropdown-menu pick-lang">
- <li>
- <a href="/v-0.10/advanced/cuszomize-native-apis.html" data-lang="en">English</a>
- </li>
- <li>
- <a href="/cn/v-0.10/advanced/cuszomize-native-apis.html" data-lang="zh-cn">中文</a>
- </li>
- </ul>
- </div>
- </li>
- <!--<li></li>-->
- </ul>
- </div>
- </div>
- <div id="mobile-nav">
- <a id="logo" href="/cn/">
- <img src="//img.alicdn.com/tps/TB1zBLaPXXXXXXeXXXXXXXXXXXX-121-59.svg" />
- </a>
- <a class="btn-menu"><span class="iconfont icon-nav"></span></a>
- </div>
-</header>
-
- <div id="sidebar" class="">
- <div class="sidebar-menu">
-
- <ul class="main-nav">
- <li>
- <div class="search">
- <form id="search-form" class="search-form"> <!-- 搜索框相关 -->
- <input type="text" id="search-input-sidebar" name="q" results="0" class="form-control search-input" autocomplete="off" autocorrect="off"/>
- <span class="iconfont icon-search"></span>
- </form>
- <div class="results-panel">
- </div>
-</div>
- </li>
- <li>
- <a class="" href="/cn/guide">
- 教程
- </a>
- </li>
- <li>
- <a class="" href="/cn/references">
- 手册
- </a>
- </li>
- <li>
- <a href="/cn/faq.html">
- FAQ
- </a>
- </li>
- <li>
- <p>工具和服务</p>
- <ul class="subnav">
- <li>
- <a href="/cn/playground.html">Playground</a>
- </li>
- <li>
- <a href="/cn/guide/tools/devtools.html">Devtools</a>
- </li>
- <li>
- <a href="/cn/guide/tools/weexpack.html">Weexpack</a>
- </li>
- <li>
- <a href="http://dotwe.org" target="_blank">Snippets</a>
- </li>
- <li>
- <a href="https://market.dotwe.org" target="_blank">Market</a>
- </li>
- </ul>
- </li>
- <li>
- <a href="https://github.com/apache/incubator-weex/" target="_blank">
- GitHub
- </a>
- </li>
- </ul>
-
- <a class="btn-close-sidebar iconfont icon-close"></a>
- </div>
-</div>
-
- <div class="article-wrapper page-layout">
- <div class="doc-nav">
-
-
-
-<div class="doc-nav-version">
- <select class="versionBtn" stype="/cn/advanced">
-
- <option value="2v">v2.x</option>
- <option value="1v" selected>v1.x</option>
-
- </select>
-</div>
-<div class="summary">
- <h2 class="part-title">
-
- 高阶知识
-
- </h2>
- <ul class="doc-summary">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/index.html" class="sidebar-link ">Weex 工作原理</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/how-data-binding-works.html" class="sidebar-link ">数据绑定原理</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/create-a-weex-project.html" class="sidebar-link ">如何创建一个 Weex 项目</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/integrate-to-android.html" class="sidebar-link ">集成到 Android</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/integrate-to-ios.html" class="sidebar-link ">集成到 iOS</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/integrate-to-html5.html" class="sidebar-link ">集成到 web</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/customize-a-native-component.html" class="sidebar-link ">自定义 native 组件</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/cuszomize-native-apis.html" class="sidebar-link current ">自定义 native API</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/extend-to-android.html" class="sidebar-link ">Android 扩展</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/extend-to-ios.html" class="sidebar-link ">iOS 扩展</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/extend-to-html5.html" class="sidebar-link ">weex-html5 扩展</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/integrate-devtools-to-android.html" class="sidebar-link ">集成 Devtools 到 Android</a></h3>
-
- </li>
-
- <li>
- <h3 class="chapter-title"><a href="/cn/v-0.10/advanced/integrate-devtools-to-ios.html" class="sidebar-link ">集成 Devtools 到 iOS</a></h3>
-
- </li>
-
-
- </ul>
-</div>
- </div>
-
-
-<article class="article article-type-advanced">
- <div class="article-entry" itemprop="articleBody">
- <header class="article-header">
-
-
- <h1 class="article-title" itemprop="name">
- 自定义 native API
- </h1>
-
-
- <time class="article-date" datetime="2017-04-28T02:36:21.000Z">Updated time: 28/04/2017</time>
-</header>
- <h1 id="如何自定义-native-API?"><a href="#如何自定义-native-API?" class="headerlink" title="如何自定义 native API?"></a>如何自定义 native API?</h1><p>Weex 的 SDK 只提供了页面渲染的能力,但是一些其它操作,比如网络请求、图片加载、重定向等功能需要你自己去实现,这个例子讲述了如何用原生代码去扩展 Weex 的功能。</p>
-<h2 id="关于-URLHelper-的例子"><a href="#关于-URLHelper-的例子" class="headerlink" title="关于 URLHelper 的例子"></a>关于 URLHelper 的例子</h2><h3 id="新建一个-WXModule"><a href="#新建一个-WXModule" class="headerlink" title="新建一个 WXModule"></a>新建一个 WXModule</h3><figure class="highlight java"><table><tr><td class="code"><pre><div class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">URLHelperModule</span> <span class="keyword">extends</span> <span class="title">WXModule</span></span>{</div><div class="line"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String WEEX_CATEGORY=<span class="string">"com.taobao.android.intent.category.WEEX"</span>;</div><div class="line"> <span class="meta">@WXModuleAnno</span></div><div class="line"> <span class="function"><span class="keyword">public</span> <span cla
ss="keyword">void</span> <span class="title">openURL</span><span class="params">(String url)</span></span>{</div><div class="line"> <span class="keyword">if</span> (TextUtils.isEmpty(url)) {</div><div class="line"> <span class="keyword">return</span>;</div><div class="line"> }</div><div class="line"> StringBuilder builder=<span class="keyword">new</span> StringBuilder(<span class="string">"http:"</span>);</div><div class="line"> builder.append(url);</div><div class="line"> Uri uri = Uri.parse(builder.toString());</div><div class="line"> Intent intent = <span class="keyword">new</span> Intent(Intent.ACTION_VIEW, uri);</div><div class="line"> intent.addCategory(WEEX_CATEGORY);</div><div class="line"> mWXSDKInstance.getContext().startActivity(intent);</div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure>
-<p>这里要注意 <code>@WXModuleAnno</code> 这个注解,它表示了你把这个方法暴露给 JavaScript。</p>
-<figure class="highlight java"><table><tr><td class="code"><pre><div class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">URLHelperModule</span> <span class="keyword">extends</span> <span class="title">WXModule</span></span>{</div><div class="line"></div><div class="line"> <span class="meta">@WXModuleAnno</span></div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">openURL</span><span class="params">(String url,String callbackId)</span></span>{</div><div class="line"> <span class="comment">//...</span></div><div class="line"> <span class="comment">//callback to javascript </span></div><div class="line"> Map<String, Object> result = <span class="keyword">new</span> HashMap<String, Object>();</div><div class="line"> result.put(<span class="string">"ts"</span>, System.currentTime
Millis());</div><div class="line"> WXBridgeManager.getInstance().callback(mWXSDKInstance.getInstanceId(), callbackId, result);</div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure>
-<h3 id="把module注册到WXSDKEngine:"><a href="#把module注册到WXSDKEngine:" class="headerlink" title="把module注册到WXSDKEngine:"></a>把module注册到WXSDKEngine:</h3><figure class="highlight java"><table><tr><td class="code"><pre><div class="line"><span class="keyword">try</span> {</div><div class="line"> WXSDKEngine.registerModule(<span class="string">"myURL"</span>, URLHelperModule.class);</div><div class="line"> <span class="comment">//'myURL' is the name you'll use in javascript</span></div><div class="line"> } <span class="keyword">catch</span> (WXException e) {</div><div class="line"> WXLogUtils.e(e.getMessage());</div><div class="line"> }</div></pre></td></tr></table></figure>
-<h3 id="在-JavaScript-中使用-eventModule:"><a href="#在-JavaScript-中使用-eventModule:" class="headerlink" title="在 JavaScript 中使用 eventModule:"></a>在 JavaScript 中使用 <code>eventModule</code>:</h3><figure class="highlight javascript"><table><tr><td class="code"><pre><div class="line"><span class="keyword">let</span> URLHelper = <span class="built_in">require</span>(<span class="string">'@weex-module/myURL'</span>);<span class="comment">//same as you registered</span></div><div class="line">URLHelper.openURL(<span class="string">"http://www.taobao.com"</span>,<span class="function"><span class="keyword">function</span>(<span class="params">ts</span>)</span>{ </div><div class="line"> <span class="built_in">console</span>.log(<span class="string">"url is open at "</span>+ts);</div><div class="line">});</div></pre></td></tr></table></figure>
-<h2 id="一些注意事项:"><a href="#一些注意事项:" class="headerlink" title="一些注意事项:"></a>一些注意事项:</h2><ol>
-<li><p>定义一个 components 需要继承 <code>WXModule</code></p>
-</li>
-<li><p>不要忘记添加 <code>@WXModuleAnno</code> 注解,不然 Weex 没法识别这个方法</p>
-</li>
-<li><p>定义的方法必须是 `public 的</p>
-</li>
-<li><p>module 类一定不能是内部类</p>
-</li>
-<li><p>你定义的 components 不能被混淆,不然会找不到</p>
-</li>
-<li><p>Module 中的方法会在 UI 线程中被调用,所以一定不要做一些耗时操作</p>
-</li>
-<li><p>Moudle 中的方法参数类型可以为 <code>int</code>,<code>double</code>,<code>float</code>,<code>String</code>,<code>Map</code>,<code>List</code>,以及实现 <code>WXObject</code> 接口的类。</p>
-</li>
-</ol>
-
- </div>
-
-</article>
-</div>
-
- <footer id="footer">
- <div class="row clearfix">
- <div class="dropdown select-lang">
- <a href="javascript:;" class="dropdown-toggle">
- Language
- <span class="caret"></span>
- </a>
- <ul class="dropdown-menu pick-lang">
- <li>
- <a href="/v-0.10/advanced/cuszomize-native-apis.html" data-lang="en">English</a>
- </li>
- <li>
- <a href="/cn/v-0.10/advanced/cuszomize-native-apis.html" data-lang="zh-cn">中文</a>
- </li>
- </ul>
- </div>
- </div>
- <div class="disclaimer">
- <div><img src="//gw.alicdn.com/tfs/TB1pTBZQFXXXXX9XXXXXXXXXXXX-794-280.png" width="200px" alt="Apache Incubator"></div>
- <div><span class="title">Disclaimer:</span> Apache Weex is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div>
- <br/>
- </div>
- <hr>
- <div class="row">
- <p> <img src="//gw.alicdn.com/tfs/TB1bg8SQFXXXXcHXXXXXXXXXXXX-85-170.png" height="50px" alt="Apache"><span>Copyright(c) 2017 The Apache Software Foundation. Licensed under the </span> <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a></p>
- </div>
- <div class="row clearfix">
- <div></div>
- </div>
-</footer>
- <div style="display: none;">
- <script src="//s95.cnzz.com/z_stat.php?id=1261496509&web_id=1261496509" language="JavaScript"></script>
-</div>
-
- <script src="/js/reqwest.js"></script>
- <script src="/js/common.js"></script>
-</body>
-</html>