我试图看看是否可以将JavaScript变量分配给KO Observable的值。
原因是我想将它作为属性分配给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个项目吗?
答案 0 :(得分:1)
这里有两个概念:
代码:
var start = 1; // index of Dog
var n = 1; // just one item
var jsonData = ko.toJSON(viewModel.pets().slice(start, start + n));
在Knockout中,observables是函数。要设置其值,请使用参数调用它。要获得它的价值,你可以称之为。
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
});