构建我的knockoutjs模型时仍然存在一些问题。
我从服务器获得的数据如下所示:
var data = {
Creation: "2012-01-01T00:00:00Z",
Id: 3,
LastActivity: null,
Name: "Foo",
Permissions: {
IsAdmin: false,
IsInternal: false,
// ... some more boolean
},
};
现在我创建一个这样的模型:
var getDetails = function (user, edit) {
UserModel = function() {
var self = this;
user = user || {
Id: 0,
Username: '',
Creation: new Date(),
LastActivity: new Date(),
Name: '',
Permissions: {
IsAdmin: false,
IsInternal: false,
// ... some more boolean
},
Stores: []
};
this.Id = ko.observable(user.Id);
this.Username = ko.observable(user.Username);
this.Creation = ko.observable(user.Creation);
this.LastActivity = ko.observable(user.LastActivity);
this.Name = ko.observable(user.Name);
// how handle the permissions ???
};
像IsAdmin, IsInternal, etc
这样的权限我必须在复选框中使用。都是布尔。
现在我的问题是,处理权限对象的最佳方法是什么。创建自己的模型?或者我可以使用这样的东西:
this.Permissions.IsAdmin = ko.observable(user.Permissions.IsAdmin);
答案 0 :(得分:4)
我会通过为权限类型创建另一个视图模型来解决这个问题,因为它是一个复杂类型,需要存储多个值。万岁的面向对象编程!
例如:
var PermissionsModel = function(permissions){
var self = this;
self.IsAdmin = ko.observable(permissions.IsAdmin || false);
self.IsInternal = ko.observable(permissions.IsInternal || false);
}
然后在UserModel
添加Permissions
属性,如下所示:
var UserModel = function(user, edit) {
var self = this;
self.Id = ko.observable(user.Id || 0);
self.Username = ko.observable(user.Username || "");
self.Creation = ko.observable(user.Creation || new Date());
self.LastActivity = ko.observable(user.LastActivity || new Date());
self.Name = ko.observable(user.Name || "");
self.Permissions = new PermissionsModel(user.permissions || {});
}
现在,您可以将data.permissions
对象直接传递给新的视图模型,让它担心实例化这些属性。
<小时/> 一个小而半相关的注释:您可以直接在
observable
函数中指定默认值。这方面的优点是您不再需要在类中创建匿名对象。此外,当您添加/编辑模型时,您不必再跟踪该对象。您可以直接更改/添加属性。