我在构造我的 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等这样的权限
我必须在复选框中使用。全部都是 bool 值。
现在我的问题是,如何处理权限对象的最佳方法。创建自己的模型?或者我可以使用这样的东西:
this.Permissions.IsAdmin = ko.observable(user.Permissions.IsAdmin);
最佳答案
我将通过为权限类型创建另一个 View 模型来解决这个问题,因为它是一个复杂的类型并且需要存储多个值。面向对象编程万岁!
例如:
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
对象直接传递给新 View 模型,并让它负责实例化这些属性。
observable
函数中分配默认值。这样做的好处是您不再需要在类中创建匿名对象。此外,当您添加/编辑模型时,您不必再跟踪该对象。您可以直接更改/添加属性。
关于javascript - Knockoutjs View 模型结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26509601/