使用 NativeScript 基于 JavaScript 構建原生應用

pdce 9年前發布 | 13K 次閱讀 移動Web開發框架 移動開發 NativeScript

有很多可供利用 HTML CSS 和 JavaScript,來創建跨平臺的應用程序,我已經在這些之前找到了很多。在這篇文章中我將討論 Telerik 所說的比許多現有的更容易創建跨平臺的應用程序 ——nativescript。

從官方文檔來看

開發者使用 nativescript 對 iOS、Android、Windows 建立通用本地應用程序,跨平臺共享應用程序代碼。構建應用程序 UI 時,開發者使用我們的庫文件,它抽象出本地平臺之間的差異。

</blockquote>

創建一個圖片搜索 flicker app

本教程中,我們將創建一個簡單的 APP,用 flickr 搜索圖片并且顯示結果,我們將利用 flicker 開發者 API 搜索圖片。

本教程源碼在 GitHub

入門

安裝 nodejs 并使用 node 包管理器 (npm) 安裝 native script。

npm install -g nativescript

裝好之后,創建一個新的項目,叫做 NativeApp

tns create NativeApp

導航至項目路徑,使用命令行添加移動開發平臺。

tns platform add android

在 android 模擬器上運行應用程序。

tns run android --emulator

使用 NativeScript 基于 JavaScript 構建原生應用

    項目結構

使用 NativeScript 基于 JavaScript 構建原生應用

項目目錄里面有 3 個子目錄:applib 和 platforms。應用程序代碼位于 app 目錄。應用程序代碼是使用 JavaScript 寫的,而用戶界面則使用 XML 進行設計。

app 目錄里面是一個叫做 main-page.xml  的文件,它是用戶界面的默認代碼。在 main-view-model.js 中是默認的模型代碼,而 main-page.js 定義了應用程序邏輯。最后 app.js 包含了使用定義好的模型啟動應用程序的代碼。

設計應用

讓我們先從使用 XML 設計應用開始吧。打開 main-page.xml 并觀察默認代碼。除了 page 標記以外其它都刪除。page 標記有一個叫做 loaded 的屬性,它會在應用一加載就執行 pageLoaded 函數。pageLoaded 函數位于 main-page.js 文件中。

本項目使用了一個棧布局來設計我們的應用。還有許多的 NativeScript布局

在page標記中添加棧布局。

<StackLayout orientation="vertical">
 
</StackLayout>

使用一個豎向(vertical)的 orientation 定義棧布局。在棧布局立面加入一個文本框和一個按鈕。

<TextField width="300px" hint="search keyword" />
 
<Button text="Search" height="50px" style="background-color:green;width:300px;border:none;font-size:20px;" />

保存并運行應用。看起來一個像下面這樣。

使用 NativeScript 基于 JavaScript 構建原生應用

從 flickr 獲取數據

在搜索按鈕中加入一個叫做 tap 的屬性

tap="signin"

現在,當用戶觸摸搜索按鈕時,signin 函數就會被調用。讓我們在 main-page.js 中定義 signin 函數。

exports.signin = function() {
  // Code would be here !
};

為了能使用 flickr 的開發者 API,你需要一個免費的 flickr 賬戶。請求一個 API key 以發起 API 請求。

在 main-page.js 定義 API key。

var api_key = 'replacewithyourkey';

調用 API 需要用到 http 模塊,所以把模塊導入 main-page.js

var http = require("http");

在 sigin 函數里面,使用 http 模塊,發起 API 調用請求。

http.getJSON("https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=" + api_key + "&text=hello&format=json&nojsoncallback=1&per_page=5").then(function(r) {
 
    console.log(JSON.stringify(r));
 
}, function(e) {
 
    console.log(e);
 
});

上面代碼暫時使用硬編碼的搜索文本發起 API 調用請求,教程中稍后會變成動態獲取的文本.

在模擬器運行應用時,你會需要運行 ‘adb logcat’ 來檢查日志消息。

保存并運行. 點擊搜索按鈕,從 Flickr 返回的結果應該在終端上可見了.

接下來使用返回的響應創建圖像的 url,并將其放入圖像數組.

可觀察的數據被用來創建一些事物的集合,并監聽變化的發生。將相同的同一個可觀察的數組綁定到視圖,那樣變化發生時視圖就會更新了。

要創建可觀察數據,可以在 main-page.js 中添加如下的變量聲明 :

var observableArray = require("data/observable-array");
var images = new observableArray.ObservableArray([]);

基于從 API 請求返回的響應,下一步是創建 flickr 圖片 URL。可以從這兒找到有關創建 flickr URL 的相關信息。

接下來我們對返回的數據進行遍歷, 創建圖像 URL 并放入圖像數組。在 signin 函數中放入這些代碼。

var imgUrl = '';
 
var photoList = r.photos.photo;
 
for (var i = 0; i < photoList.length; i++) {
    imgUrl = "https://farm" + photoList[i].farm + ".staticflickr.com/" + photoList[i].server + "/" + photoList[i].id + "_" + photoList[i].secret + ".jpg";
 
    images.push({
        img: imgUrl
    });
 
}

將數據綁定到 UI

圖像數組里面有了數據,就可以綁定到UI了。為了能展現數據,在 main-page.xml 中創建一個 ListView , 就在現有的 Button 元素底下。

<ListView>
    <ListView.itemTemplate>
 
        <Image stretch="fill" height="200px" />
 
    </ListView.itemTemplate>
</ListView>

將圖像數組綁定到 list 視圖,設置圖片的來源(src)。

 <ListView items="{{ images }}">
    <ListView.itemTemplate>
 
        <Image stretch="fill" height="200px" src="{{img}}" />
 
    </ListView.itemTemplate>
</ListView>

為了讓圖像數組在整個視圖上可用,在 observable 模塊中設置圖像數組。為此導入 observable 模塊,并用它來創建一個 observable 對象。

var observableModule = require("data/observable");
var pageData = new observableModule.Observable();

在 pageLoaded 函數中將圖像數組設置到 observable 模塊,并將模塊添加到頁面上下文中。

function pageLoaded(args) {
    var page = args.object;
    pageData.set("images", images);
    page.bindingContext = pageData;
}

使用相同的 pageData observable 對象,來自搜索文本框的值就可以被讀取。修改文本域,加入 text 屬性。

<TextField width="300px" text="{{txtKeyword}}"  hint="search keyword"/>

signin 函數中要刪除硬編碼的 hello 搜索文本,并像下面這樣替換它:

pageData.get('txtKeyword')

保存并運行。點擊搜索按鈕,從 Flickr API 收到的圖像就可以被看到了。請求返回了 5 張圖片,因此向下滑動應該能看到所有的圖片。

使用 NativeScript 基于 JavaScript 構建原生應用

總結

教程展示了如何開始使用 NativeScript 創建一個簡單的移動應用。有關使用 NatieScript 的詳細信息,我建議閱讀 官方文檔

你有使用 NativeScript 進行移動開發的經歷嗎? 使用它時你有什么感想 ? 讓我們在評論中知道你的觀點,建議以及修改意見。

 本文由用戶 pdce 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!