Javascript knockoutjsviewmodel结构
我在构建knockoutjs模型时仍然存在一些问题Javascript knockoutjsviewmodel结构,javascript,knockout.js,Javascript,Knockout.js,我在构建knockoutjs模型时仍然存在一些问题 我从服务器获取的数据如下所示: var data = { Creation: "2012-01-01T00:00:00Z", Id: 3, LastActivity: null, Name: "Foo", Permissions: { IsAdmin: false, IsInternal: false, // ... some more boolean
我从服务器获取的数据如下所示:
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 ???
};
this.Permissions.IsAdmin = ko.observable(user.Permissions.IsAdmin);
现在,我创建一个如下模型:
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 ???
};
this.Permissions.IsAdmin = ko.observable(user.Permissions.IsAdmin);
像IsAdmin、IsInternal等权限,我必须在复选框中使用。他们都是布尔人。
现在我的问题是,如何处理权限对象的最佳方式。创建自己的模型?或者我可以用这样的东西:
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 ???
};
this.Permissions.IsAdmin = ko.observable(user.Permissions.IsAdmin);
我将通过为permissions类型创建另一个视图模型来实现这一点,因为它是一个复杂的类型,需要存储多个值。万岁面向对象编程
例如:
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
函数中直接指定默认值。这样做的好处是,您不再需要在类中创建匿名对象。此外,当您添加/编辑模型时,您不必再跟踪该对象。您可以直接更改/添加属性 我将通过为权限类型创建另一个视图模型来实现这一点,因为它是一个复杂的类型,需要存储多个值。万岁面向对象编程
例如:
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
函数中直接指定默认值。这样做的好处是,您不再需要在类中创建匿名对象。此外,当您添加/编辑模型时,您不必再跟踪该对象。您可以直接更改/添加属性 为权限类型创建视图模型,即PermissionsModel=function(permissions){IsAdmin=ko.observable();/…etc}
然后在UserModel
中添加self.permissions=new PermissionsModel(user.permissions)代码>好的,我认为这是正确的方法。为权限类型创建一个视图模型,即PermissionsModel=function(permissions){IsAdmin=ko.observable();//…etc}
然后在UserModel
中添加self.permissions=newpermissionsModel(user.permissions)好的,我认为这是正确的方法。