KnockoutJS-将可观察值分配给JavaScript变量

KnockoutJS-将可观察值分配给JavaScript变量,javascript,knockout.js,Javascript,Knockout.js,我试图看看是否可以将一个JavaScript变量分配给一个KO可观测值的值 原因是我想将其作为属性分配给jquery模块 我知道我能做到: var viewModel = { firstName : ko.observable("Bert"), lastName : ko.observable("Smith"), pets : ko.observableArray(["Cat", "Dog", "Fish"]), type : "Customer" };

我试图看看是否可以将一个JavaScript变量分配给一个KO可观测值的值

原因是我想将其作为属性分配给jquery模块

我知道我能做到:

    var viewModel = {
    firstName : ko.observable("Bert"),
    lastName : ko.observable("Smith"),
    pets : ko.observableArray(["Cat", "Dog", "Fish"]),
    type : "Customer"
};
viewModel.hasALotOfPets = ko.computed(function() {
    return this.pets().length > 2
}, viewModel)


var jsonData = ko.toJSON(viewModel);

但是,如果我不想要视图模型中的所有内容,该怎么办?我可以只选择n个项目吗?

这里有两个概念:

  • 从一个敲除可观察对象中检索对象
  • 操纵JavaScript数组
  • 代码:

    在淘汰赛中,可观测值是函数。要设置它的值,可以使用参数调用它。要想得到它的价值,你可以调用它

    JavaScript数组有一个切片函数,可用于获取较小的数组

    根据对该问题的评论更新:

    如果要从viewModel中获取n个字段,
    ko.toJSON
    将在一个子集视图模型上工作:

    var n = 2;
    var count = 0;
    var subModel = {};
    for (var k in viewModel) {
        if (count >= n) break;
        if (viewModel.hasOwnProperty(k)) {
            subModel[k] = viewModel[k];
            count++;
        }
    }
    
    var jsonData = ko.toJSON(subModel);
    
    如果只需要特定字段,请使用以下字段创建子集模型:

    var jsonData = ko.toJSON({
        firstName: viewModel.firstName,
        type: viewModel.type
    });
    

    您想省略哪些项目?是否有足够的数量可以手动排除它们?不一定。这只是我提供的一个例子。但例如,我只想得到像firstName和type这样的名称。我只是想知道我是否只能得到select值。你也许可以用knockout映射插件做些什么,但我不知道我脑子里想的是什么语法
    var jsonData = ko.toJSON({
        firstName: viewModel.firstName,
        type: viewModel.type
    });