在本文中
筆者想應用程序中嵌入了更新的屏播
這裡的概念是在搜索框中鍵入查詢時
按照MVC模式
首先
package it
import java
public class Taxon extends Comparable
{
public
public
public
override function compareTo (other : Object)
{
return pareTo((other as Taxon)
}
override function toString()
{
return
}
}
public function displayNameGetter (taxon : Taxon): String
{
return taxon
}
public function scientificNameGetter (taxon : Taxon): String
{
return taxon
}
public def namePropertyGetters = [displayNameGetter
類托架外面定義的函數和變量相當於Java靜態分析
這裡我們省略了一些不相關的實際項目
package it
import it
public class TaxonSearchController
{
public var selectedTaxon = bind if (selectedTaxonIndex <
public var selectedTaxonIndex : Integer =
public var taxons: Taxon[];
public var filter =
{
filteredTaxons = taxons[taxon | matches(taxon
update();
}
public
public var filteredTaxons: Taxon[];
protected function matches (taxon : Taxon
{
if (string ==
{
return true;
}
for (propertyGetter in Taxon
{
if (propertyGetter(taxon)
{
return true;
}
}
return false;
}
protected function update(): Void
{
def autoCompletedTry = commonLeadingSubstring(filteredTaxons
//
// Sometimes it can
// and the scientificName at the same time
//
if (autoCompletedTry
{
autoCompleted = autoCompletedTry;
}
selectedTaxonIndex = if (sizeof filteredTaxons ==
println(
}
protected function findMatchingPropertyGetter(): function (:Taxon): String
{
for (taxon in filteredTaxons)
{
for (propertyGetter in Taxon
{
if (propertyGetter(taxon)
{
return propertyGetter;
}
}
}
return null;
}
// some stuff later
}
這個類揭示了以下的屬性
·taxons
·filter: 字符串包括需要輸入到搜索欄中的文本
·filteredTaxons: 種類由filter字符串過濾
·autoCompleted: 控制器猜測的自動完成輸入字符串
·selectedTaxon: 如果filter向下細分種類
·selectedTaxonIndex:
最新的四種屬性由客戶代碼來綁定
Filter獲取了一個觸發事件
出於某些原因
Matches()函數在所有屬性上執行了一次迭代以獲取函數並檢查看相關屬性是否以過濾值啟動
創建獲得屬性值函數的序列的一大好處是我們可以通過定義新的函數輕松添加新的匹配標准
Update()函數運算出了自動完成輸入提示
要明白這一點的重要性
最後一步操作中
或許
另一個有意思的地方是findMatchPropertyGetter()
為了對文章進一步作補充說明
protected function commonLeadingSubstring (taxons: Taxon[]
{
if (sizeof taxons ==
{
return
}
if (sizeof taxons ==
{
return propertyGetter(taxons[
}
var common = propertyGetter(taxons[
for (other in taxons[
{
common = commonLeadingSubstring(common
if (common ==
{
break; // don
}
}
return root;
}
function commonLeadingSubstring (string
{
return if (string
{
commonLeadingSubstring(string
}
else if (string
{
}
else if (string
{
string
}
else
{
commonLeadingSubstring(string
}
}
這裡的邏輯很簡單
這裡顯示了視圖類是如何綁定到控制器的
package it
public class TaxonSearchScreen
{
public var taxons : Taxon[];
var filter =
public
{
taxons: bind taxons
filter: bind filter
}
def autoCompleted = bind controller
{
if (autoCompleted !=
{
filter = autoCompleted;
}
}
def list = ListBox
{
items: bind controller
};
def searchBox = TextBox
{
text: bind filter with inverse
};
}
你必須用所有可得的種類加載taxon;ListBox會隨著過濾的種類自動更新From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19490.html