编辑器 1.4 beta - .NET
当当初开发 Editor 时,很明显应该为服务器端提供一系列的与客户端 Javascript 库相辅相成的库,并尽可能地简化软件安装。当时决定 PHP 库将是重点(毕竟 PHP 确实占有 绝大多数市场份额)。但是,一直以来都打算为其他服务器端环境开发库。
今天我非常高兴地宣布,随着 Editor 1.4 beta 版的发布,这一梦想得以实现,该版本向 Editor 工具套件添加了 .NET 库。PHP 库中也进行了一些更改来提高灵活性,Javascript 组件中也有一些更改,详见下文,但是此版本的重点是新的 .NET 库。
.NET
.NET 框架非常强大,并推动着全球大量的商业网站。随着微软近期宣布 .NET 核心现已开放源代码 并且未来将在 Mac 和 Linux 计算机上运行,加入 .NET 生态系统非常令人激动。
Editor .NET 包中包含的库与 Editor PHP 库具有同等特性,这两个库未来将同步开发。当然有一些 .NET 专有特性,例如能够以无缝的方式处理模型(在 MVC 应用中你可能希望看到),以及进行了小的 API 更改以符合 .NET 开发惯例,但是未来,如果其中一个库中添加了某个特性,那么你可以期望在另一个库中也看到它!
新的文档已在 Editor 网站上发布,详细介绍了如何
- 安装并运行标准 Editor 示例(可在 下载页面 上下载 Visual Studio 项目)
- Editor 库的基本概念
- 与 Web API 和 ASP.NET MVC 一起使用
- 和更多
- 详细的 API 参考也已准备好
客户端
值得注意的是,此网站上提供的 Javascript 示例和文档与 .NET 框架完全兼容。让 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 正式版之前添加。
- 1 对多联接支持。PHP 库提供了一个
join()
方法来提供该功能,这将在 Beta 版期间添加。 - 生成器支持。生成器将创建简单项目所需的所有代码,以便快速启动。这也会在 Beta 版期间添加。
PHP
尽管大部分开发重点都放在新的 .NET 库上,但 Editor 的 PHP 组件也有一些改进。
- 细粒度获取和设置控制
- 多个验证程序
- 自动选项
细粒度获取和设置控制
以前可以控制字段是可读/可写、只读或只写。这仍然可以进行,但通过使用 set()
方法,现在还可以控制是否在创建或编辑操作中设置字段。这提供了使用仅在行创建或更新时设置的字段的能力,例如显示行何时创建或上次编辑的时间戳字段。
除此之外,新的 setValue()
和 getValue()
方法还提供了提供一个值的能力,该值将使用该值,而不考虑从数据库中读取的任何值(在获取的情况下)或从客户端 Editor 中读取的(在设置的情况下)。
例如,考虑一个在创建时应该设置时间戳并且在 DataTables 请求表的相关数据时读取该值的 created
字段
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 网站上的 join 示例 都使用此方法填充联接字段。
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!