Editor 1.4 beta - .NET
當初開發 Editor 時,很明顯地,應該為伺服器端提供一套函式庫,以補充客戶端 Javascript 函式庫,並盡可能簡化軟體的安裝。當時決定以 PHP 函式庫為首要重點(畢竟,PHP 確實享有 多數的市佔率)。然而,開發其他伺服器端環境的函式庫一直是目標。
我很高興今天宣布,隨著 Editor 1.4 beta 的發布,這個夢想終於實現,它為 Editor 工具套件新增了 .NET 函式庫。PHP 函式庫也進行了一些變更,以提高彈性,並且 Javascript 元件也進行了如下詳述的變更,但此版本的主要重點是新的 .NET 函式庫。
.NET
.NET Framework 非常強大,並推動著全球大量的商業網站。隨著 Microsoft 最近宣布 .NET Core 已開源,並且未來將在 Mac 和 Linux 電腦上運行,現在加入 .NET 生態系統是令人興奮的時刻。
Editor 套件中包含的 .NET 函式庫與 Editor PHP 函式庫享有相同的功能,並且未來兩者將同步開發。當然,也有一些 .NET 特有的功能,例如能夠以無縫方式處理模型(正如您在 MVC 應用程式中可能預期的那樣),以及一些小的 API 變更,以符合 .NET 開發慣例。但在未來,如果為其中一個函式庫新增了功能,預計另一個也會具備!
新的文件已發布在 Editor 網站上,其中詳細說明如何
- 安裝和執行標準 Editor 範例(Visual Studio 專案可在下載頁面下載)
- Editor 函式庫的基本概念
- 搭配Web API和ASP.NET MVC使用
- 以及更多
- 還提供詳細的 API 參考
客戶端
值得注意的是,本網站上提供的 Javascript 範例和文件與 .NET Framework 完全相容。不需要進行任何變更,即可讓 Editor 與新的 Editor .NET 函式庫互動。Editor 函式庫在設計時就特別考慮到這一點,以確保 Javascript 程式設計環境對於支援的 PHP 和 .NET 函式庫都是通用的。
Web API
以下程式碼片段示範在 .NET 中使用 Editor 的簡易性,展示如何將函式庫與 Web API 一起使用(更多詳細資訊)
public class StaffController : ApiController
{
[Route("api/staff")]
[HttpGet]
[HttpPost]
public IHttpActionResult Staff([FromBody] FormDataCollection formData)
{
DtResponse response = new Editor(Db, "staff")
.Model<StaffModel>()
.Process(formData)
.Data();
return Json(response);
}
}
您會注意到在第 9 行,使用 StaffModel
來描述應該從資料庫讀取、顯示在表格中並設為可編輯的資料。Field()
方法也可用於描述欄位並增加對其的精細控制。
MVC
與上述相同的 Web API 範例,但適用於 ASP.NET MVC 的範例非常相似(在這種情況下,使用標準路由而不是屬性路由,如果需要,也可以使用屬性路由)
public class StaffController : Controller
{
public ActionResult Table()
{
DtResponse response = new Editor(Db, "staff")
.Model<Models.StaffModel>()
.Process(Request.Form)
.Data();
return Json(response, JsonRequestBehavior.AllowGet);
}
}
Beta 版中缺少的功能
.NET Editor 函式庫是 beta 版軟體,如果您遇到任何問題,非常感謝您回報。
此外,還有幾個區域未包含在預先發布的軟體中,但將在發布 1.4.0 最終版之前新增
- 一對多聯結支援。PHP 函式庫提供
join()
方法以提供此功能,這將在 beta 版期間新增。 - 產生器支援。產生器將建立簡單專案所需的所有程式碼,以讓您快速開始。這也將在 beta 版期間新增。
PHP
雖然大部分的開發重點都放在新的 .NET 函式庫上,但 Editor 的 PHP 元件也進行了一些改進
- 精細的 get 和 set 控制
- 多個驗證器
- 自動選項
精細的 get 和 set 控制
先前可以控制欄位是讀取/寫入、唯讀或僅寫入。這仍然可行,但使用 set()
方法,現在還可以控制欄位是在建立或編輯動作時設定。這讓您能夠使用僅在列建立或更新時設定的欄位,例如顯示列建立或上次編輯時間的時間戳記欄位。
此外,新的 setValue()
和 getValue()
方法也提供設定一個值的功能,無論從資料庫(在get的情況下)或從客戶端 Editor(在set的情況下)讀取的任何值,都將使用該值。
例如,考慮一個 created
欄位,該欄位應在建立時設定一個時間戳記(不是從客戶端發送),並且在 DataTables 請求表格資料時也要讀取該值
new Field( 'created' )
->set( FIELD::SET_CREATE )
->setValue( time() );
多個驗證器
現在可以為單個欄位提供多個驗證器。欄位必須通過所有驗證器才能被視為有效。例如,考慮一個必須是唯一的電子郵件地址輸入欄位。email
和 unique
驗證器可以同時使用
new Field( 'email' )
->validator( 'Validate::email' )
->validator( 'Validate::unqiue' );
自動選項
在使用聯結時,通常會希望從聯結表格中取得選項清單,以允許最終使用者從有限的集合中選擇一個值。先前使用 Editor 函式庫時,這需要自訂 SQL 呼叫資料庫和在客戶端initComplete
中的自訂程式碼,但現在有一個新的 Field options()
方法可用,它會為您執行此操作,選擇資料,將其發送回客戶端,資料將自動填入欄位中。
例如,考慮一個select
欄位,其選項清單應從聯結表格中填入。現在只需單次呼叫 options()
即可
new Field( 'users.site' )
->options( 'sites', 'id', 'name' );
Editor 網站上的聯結範例現在都使用此方法來填入聯結欄位。
Javascript
在 Editor Javascript 函式庫中,最重要的變更是支援 DataTables 初始化中的新 editField
選項。這旨在使將聯結資料與內嵌和氣泡編輯一起使用更加容易。
在使用inline()
和bubble()
時,Editor 會根據它和 DataTables 可用的資訊自動嘗試判斷應該編輯哪個資料點 - 匹配欄和欄位名稱。
但是,在使用聯結表格時,在表格中使用一個資料點來顯示,另一個資料點作為要編輯的值並不少見。這將導致 Editor 出現錯誤,並需要指定 API 呼叫中的欄位名稱。
editField
選項將一個選項新增到 DataTables columns
選項,該選項將通知 Editor 要編輯哪個欄位。例如,考慮以下欄定義
columns: [
{ data: "users.first_name" },
{ data: "users.last_name" },
{ data: "sites.name", editField: "users.site" }
]
在這種情況下,雖然 DataTable 將顯示 sites.name
值,但 Editor 將編輯 users.site
欄位!此用例可以在Editor 範例中實際看到。
Beta 版回饋
此版本的 Editor 非常令人興奮,但它是 beta 版軟體。我非常鼓勵您下載 beta 版(無論您對 .NET 還是 PHP 感興趣!),並告訴我您的使用情況。如果您回報錯誤,請確保您提供了問題的完整描述,最好提供您正在使用的頁面的連結。
希望您喜歡使用 Editor!