7 个版本
0.1.7 | 2020 年 9 月 2 日 |
---|---|
0.1.5 | 2020 年 7 月 16 日 |
0.1.4 | 2020 年 3 月 5 日 |
0.1.2 | 2020 年 2 月 26 日 |
#1632 in 网页编程
每月 38 次下载
用于 yew_form_derive
30KB
797 行
Yew Form
将 MVC 带入 Yew!一组具有轻微偏见的 Yew 组件,用于将模型映射和验证到 HTML 表单。
支持
- 与结构体双向绑定(支持嵌套结构体)
- 验证(使用 Keats Validator)
- 目前仅支持
String
和bool
字段。更多功能即将推出
用法
Cargo.toml
[dependencies]
validator = "0.10"
validator_derive = "0.10"
yew = "0.12"
yew_form = "0.1"
yew_form_derive = "0.1.4"
main.rs
#[macro_use]
extern crate validator_derive;
extern crate yew_form;
#[macro_use]
extern crate yew_form_derive;
示例
考虑以下模型
#[derive(Model, Validate, PartialEq, Clone)]
struct Address {
#[validate(length(min = 1, message="Street is required"))]
street: String,
#[validate(length(min = 1, message="City name is required"))]
city: String,
#[validate(regex(path="PROVINCE_RE", message="Enter 2 digit province code"))]
province: String,
postal_code: String,
country: String,
}
#[derive(Model, Validate, PartialEq, Clone)]
struct Registration {
#[validate(length(min = 1, message="First name is required"))]
first_name: String,
#[validate(length(min = 1, message="Last name is required"))]
last_name: String,
quantity: u32,
price: f64,
#[validate]
address: Address,
#[validate(custom = "must_be_true")]
accept_terms: bool,
}
可以使用以下定义将结构体绑定到 Yew 表单
struct App {
form: Form<Registration>,
...
}
目前,需要按照以下方式实例化 Form
fn create(_props: Self::Properties, link: ComponentLink<Self>) -> Self {
// Create model initial state
let model = Registration {
first_name: String::from("J-F"),
last_name: String::from("Bilodeau"),
address: Address {
street: String::new(),
city: String::from("Ottawa"),
province: String::from("ONT"),
postal_code: String::from("K2P 0A4"),
country: String::new(),
},
};
Self {
form: Form::new(model),
...
}
...
可以按照以下方式向表单添加字段
<Field<Registration> form=&self.form field_name="first_name" oninput=self.link.callback(|_: InputData| AppMessage::Update) />
...
<Field<Registration> form=&self.form field_name="address.street" oninput=self.link.callback(|_: InputData| AppMessage::Update) />
...
<CheckBox<Registration> field_name="accept_terms" form=&self.form />
Field
组件负责在 struct Registration
和 HTML <input>
之间进行双向绑定
当用户编辑表单或程序化时,将自动进行验证。
if self.form.validate() {
...
}
待办事项/愿望清单
- 添加文档(进行中)
-
从模型中移除 clone 要求 - 为模型添加
derive
以移除对vec!
的需要 - 使
oninput
可选 - 当
Field
更新时,让 Yew 更新视图 - 需要向
Field
添加额外的 HTML 属性 - 移除硬编码的 Bootstrap 样式
- 支持额外的类型,如
i32
- 支持
Vec<T>
- 支持 Rust 稳定版
变更日志
0.1.7
- 从代码中删除
#![feature(get_mut_unchecked)]
(感谢 L0g4n)
0.1.6
- 删除了不安全代码
- 更新文档中的 yew_form 版本
0.1.5
- 更新到 Yew 0.17
0.1.4
- 为 FieldValue 添加了泛型实现以支持
i32
、bool
等...
0.1.3
重大变更
- 添加了
#[derive(Model)]
- 不需要手动将字段向量传递给
Form::new()
0.1.2
- 添加了复选框
0.1.1
- 使
Field::oninput
可选
(用 ❤️ 用 Rust 制作)
依赖项
~9.5MB
~199K SLoC