如何在挖空视图模型中处理空对象和满对象
How to handle empty and full objects in a Knockout ViewModel
我似乎无法在堆栈上找到我正在寻找的答案。也许我的情况是错误的,但无论如何我都会问这个问题。我有一个表格,有两个目的...创建新用户和查看用户。两者具有相同的视图模型User
。那么让我们看看我的视图模型:
var UserModel = function() {
var self = this;
self.UserId = ko.observable();
self.FirstName = ko.observable();
self.LastName = ko.observable();
self.FirstName.extend({required: true});
return self;
}
所以我的绑定是在更高级别的配置的,我有一个视图模型,其中包含一个名为 User
的属性。 这个名为 User
的属性绑定到我的窗体。对于创建新用户的简单方案,我会调用:
this.User(new UserModel());
注意:this.User
是可观察到的,因此括号。
这将成功创建具有空白表单的用户模型,并且所有验证都有效。
好的,所以场景二!我从 API 获得一个完整的对象,我应该如何映射它。如果我使用:
this.User(ko.mapping.fromJS(data, {}, UserModel));
验证不起作用。我已经看到了包含create
方法的映射选项,但是如何在不丢失顶部功能的情况下使用它?!
作为旁注,使其稍微复杂一点:
User.ConfirmEmail
存在于我的视图模型中,但不存在于服务器上!这就是我的下一个障碍。如果我使用create
映射,我知道我可以轻松添加它。
我当前的工作示例
通过使用大量构造函数参数,我可以同时完成以下两个目标:
var UserModel = function(id, fname, lname) {
var self = this;
self.UserId = ko.observable(id);
self.FirstName = ko.observable(fname);
self.LastName = ko.observable(lname);
self.FirstName.extend({required: true});
return self;
}
如果我现在使用,new UserModel()
它仍然可以设置属性,我也可以传递值。它看起来很糟糕:(
将用户的创建与有效性规则的添加分开:
function userFactory(user) {
if (typeof user === 'undefined') {
user = new User();
}
user.firstName.extend({required: true});
}
然后你可以这样做:
var newUser = userFactory(ko.mapping.fromJS(data, {}, new UserModel()));
this.user(newUser);
。并保留验证。
相关文章:
- 如何使用内部对象构造对象
- 添加到Javascript中对象的对象中
- 在JS中围绕旋转对象旋转对象
- “;Stub对象”;对象不符合检查点's条件
- 向Angular作用域对象添加对象数组——TypeError
- Javascript JSON对象替换对象中的字符串
- 在HTML5画布中,是否可以围绕旋转对象旋转对象
- 动态创建嵌套的JSON对象父对象和子对象
- 如何筛选所有属性都是对象的对象
- javascript:对具有对象的对象进行排序并读取它们
- 如何将对象插入对象列表的开头,当它有 unshift 不是函数错误
- 在 Forerunner 数据库集合中创建主键时,key 属性是否可以位于集合对象的对象内部
- 使用 Javascript 对象作为对象键
- PhantomJS 控制台.log对象输出 [对象对象]
- 如何创建行为类似于本机对象的对象
- IE8对象当对象包含null值时应出现错误
- 循环遍历以数组作为值的对象的对象
- 递归没有完全遍历具有嵌套对象的对象
- 按对象的 ID 删除对选定对象的对象引用
- 如何在挖空视图模型中处理空对象和满对象