Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript knockoutjsviewmodel结构_Javascript_Knockout.js - Fatal编程技术网

Javascript knockoutjsviewmodel结构

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

我在构建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 ???

    };
 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)