Windows8 Metro 設計與開發-搜尋與共用 (2)

來源:互聯網
上載者:User
增加菜譜搜尋

在練習 2 中,我們為Contoso Cookbook增加搜尋支援,使使用者可以使用Search常用鍵搜尋菜譜資料。例如,如果使用者想要尋找所有含有糖的菜譜,那麼他可以調用Search常用鍵,在搜尋方塊中輸入“sugar”,然後就會顯示一個含糖菜譜列表。

任務 1 –調用Search常用鍵

在為Contoso Cookbook增加搜尋支援之前,我們先來瞭解一下當Contoso Cookbook處於前端時調用搜尋 UI 的效果。

1.      按 F5 啟動應用程式。

2.      如果您使用觸控螢幕裝置,那麼從右至左輕掃螢幕左邊緣,或者按Win-C 鍵,顯示常用鍵工具列。

3.      點擊 Search 常用鍵,顯示 Metro 搜尋窗格。

4.      在搜尋方塊中輸入“sugar”(不帶雙引號),按斷行符號鍵,或者點擊搜尋方塊右邊的放大鏡表徵圖。

5.      這時 Windows 8 會顯示“No apps match your search.(無匹配的應用)”如果增加了搜尋支援,搜尋結果將會發生變化。

6.      返回Visual Studio並停止調試。

 

任務 2 –增加搜尋支援

要實現搜尋,您必須為應用編寫一個搜尋Contracts。Visual Studio 將會協助完成大部分的工作,將 JavaScript contract插入到應用中。修改JavaScript,就可以實現應用資料的特定域搜尋功能。這個過程很簡單,具體見以下幾個步驟。

1.      右鍵點擊Solution Explorer的html檔案夾,選擇“Add - New Item”命令,添加一個搜尋Contractsearch.html, 3 所示。


3

添加搜尋Contracts

2.      Visual Studio 會在html 檔案夾建立3個檔案:search.html、search.css和search.js。將search.css 移動到項目的 css 檔案夾,將 search.js 移動到項目的 js 檔案夾。

3.      在default.html中添加以下語句,保證應用啟動時能夠載入search.js:

HTML

<scriptsrc="/js/search.js"></script>

4.      開啟search.js,找到searchData函數。這個函數是在使用者通過Search常用鍵發起搜尋時所調用搜尋Contracts的一部分。需要修改這個函數的代碼,才能實現菜譜搜尋。在函數最後是使用Regex調用三次match的return語句,要將它修改為:

JavaScript

return (item.title.match(regex) ||item.directions.match(regex));

注意:上面的代碼會在ContosoCookbook中搜尋在每一個菜譜的標題與做法屬性,找到與搜尋方塊所輸入內容相匹配的菜譜。搜尋內容會通過參數queryText傳遞給searchData函數。如果想要將搜尋範圍擴大到其他菜譜屬性,您可以修改這個參數。

5.      還是在search.js中,找到itemInvoked函數。當使用者選擇搜尋結果列表ListView的一個項目時,就會調用這個函數。去掉nav.navigate調用語句之前的注釋符,並將它修改為轉到itemDetailPage.html:

JavaScript

nav.navigate("/html/itemDetailPage.html",{ item: item.data });

6.      開啟search.html,其中有一段HTML 程式碼定義了搜尋結果的顯示方式。找到類設定為“item”的 DIV,在該元素中找到類設定為“item-content”的 DIV。將該 DIV 的內容(包括 1 個 H3 元素和 2 個 H4 元素)替換為以下語句:

HTML

<h3 class="item-title win-type-ellipsis"data-win-bind="innerHTML: shortTitlesearch.markText"></h3>

<h4 class="item-subtitlewin-type-x-small win-type-ellipsis">

    Preparation time:<spandata-win-bind="textContent: preptime"></span>minutes

</h4>

7.      還是在search.html中,將 LINK 元素的引用地址修改為search.css,使它引用css檔案夾的search.css(在第 2 步時已將它移到這個檔案夾):

HTML

<link href="/css/search.css"rel="stylesheet">

8.      開啟search.css,添加下面高亮顯示的代碼。它們的效果是稍微增大搜尋結果所顯示菜譜映像的尺寸,但是同時保證映像仍然保持原來的尺寸比例:

CSS

.search section[role=main] .resultslist.item {

   /* Define a grid with columns for an icon, spacing and item details */

-ms-grid-columns:62px 8px 1fr;

   -ms-grid-rows: 1fr;

   display: -ms-grid;

   height: 100%;

   width: 100%;

}

 

.search section[role=main] .resultslist.item .item-image {

   -ms-grid-column: 1;

   -ms-grid-row: 1;

height:45px;

   margin-top: 5px;

width:60px;

}

9.      按 F5 啟動應用程式。

10.  顯示常用鍵工具列。

11.  點擊“Search”常用鍵,顯示 Metro 的搜尋窗格。

12.  在搜尋窗格頂部的搜尋方塊中輸入“rice”(不帶雙引號),然後按斷行符號鍵,或者點擊搜尋方塊右邊的放大鏡表徵圖。

13.  確認搜尋結果中出現 4 個菜譜( 4 所示)。

 

 

 


4

搜尋“rice”的結果

14.  選擇其中一個菜譜,確認菜譜細節顯示。

15.  返回Visual Studio並停止調試。

 

任務 3 –最佳化搜尋結果頁面

到目前為止,一切正常。在VisualStudio中添加搜尋Contracts非常簡單。進行一些小修改,就可以實現ContosoCookbook應用的搜尋功能。但是,您是否注意到搜尋結果頁面頂端的奇怪術語?它並沒有顯示具體的組名,如“Chinese”和“Italian”,而是顯示“Group 1”、“Group 2+”等。只要簡單地修改 search.js,就可以修改顯示結果。

1.      開啟search.js,找到檔案頂部的備註陳述式“TODO: Replace or remove examplefilters.”。

2.      將注釋下面的兩行代碼(兩次調用this.filters.push)替換為以下語句:

JavaScript

data.groups.forEach(function (group) {

this.filters.push({ results: null, text:group.title, predicate: function (item) { return item.group.key === group.key;} });

}, this);

注意:這些語句將 Visual Studio 產生的寫入程式碼組名替換為應用的菜譜分組。

3.      重新啟動應用,再次搜尋“rice”。這時頁面頂部的萬用群組名會被替換為菜譜組名, 5 所示。


5

帶有菜譜分組標題的搜尋結果 

4.      返回Visual Studio並停止調試。

 

任務 4 –添加搜尋建議

我們給搜尋體驗作最後一個改進,在使用者在搜尋方塊輸入搜尋索引鍵時提供一些建議。這很容易實現;我們只需要添加一個SuggestionsRequested事件處理器。方法如下:

1.      開啟search.js,在檔案底部(onquerysubmitted事件處理器之後)添加以下函數:

JavaScript

appModel.Search.SearchPane.getForCurrentView().onsuggestionsrequested= function (eventObject) {

var text =eventObject.queryText.toLowerCase();

var terms = ["salt","pepper", "water", "egg", "vinegar","flour", "rice", "oil"];

 

terms.forEach(function(term) {

      if (term.indexOf(text) == 0) {

              eventObject.request.searchSuggestionCollection.appendQuerySuggestion(term);}

   });

};

注意:上面所添加代碼為salt、pepper、water、egg、vinegar、flour、rice和oil等單詞提供模式比對搜尋建議。如果使用者輸入“sa”,那麼單詞salt就會顯示在搜尋窗格中,作為建議的補全詞彙。當然,我們可以添加更多的建議。如果想要在使用者輸入“ke”時顯示ketchup,那麼只需要將這個詞添加到列表中。

2.      重新啟動應用,搜尋“vinegar”。確認“vinegar”出現在搜尋方塊下面的建議列表中, 6 所示。


6

搜尋建議執行效果 

3.      返回Visual Studio並停止調試。

注意:本文章為msdn上windows8線上實驗的指令碼,僅供學習參考。如果想體驗完整實驗可以點擊以下msdn的線上實驗室

http://msdn.microsoft.com/zh-cn/hh968278  

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.