Knockout.js KnockoutJS-将属性添加到对象时添加列

Knockout.js KnockoutJS-将属性添加到对象时添加列,knockout.js,Knockout.js,我正试图修改我的底层数据对象,并在页面上获得更新和显示新列的能力。数据对象更新良好,但不会触发UI的重新呈现 我还不明白什么 还有Javascript: var vm; window.onload = function() { var VM = function () { var self = this; self.items = ko.observableArray(); self.columnNames = ko.computed(function () {

我正试图修改我的底层数据对象,并在页面上获得更新和显示新列的能力。数据对象更新良好,但不会触发UI的重新呈现

我还不明白什么


还有Javascript:

var vm;

window.onload = function() {
var VM = function () {
    var self = this;
    self.items = ko.observableArray();
    self.columnNames = ko.computed(function () {
        if (self.items().length === 0)
            return [];
        var props = [];
        var obj = self.items()[0];
        for (var name in obj)
            props.push(name);
        return props;


    });

};
vm = new VM();

ko.applyBindings(vm);

vm.items.push({
    'Name': 'John',
    'Age': 25
});
vm.items.push({
    'Name': 'Morgan',
    'Age': 26
});

// Add an extra property to each object
for (var i = 0; i < vm.items().length; i++) {
        vm.items()[i].Weight = '50kg';
}
// ????? Table should update with new column 'Weight'

}
var-vm;
window.onload=函数(){
var VM=函数(){
var self=这个;
self.items=ko.observearray();
self.columnNames=ko.computed(函数(){
if(self.items().length==0)
返回[];
var-props=[];
var obj=self.items()[0];
for(obj中的变量名称)
道具推(名称);
返回道具;
});
};
vm=新vm();
ko.应用绑定(vm);
vm.items.push({
“姓名”:“约翰”,
年龄:25岁
});
vm.items.push({
“姓名”:“摩根”,
年龄:26
});
//向每个对象添加额外属性
对于(var i=0;i
您并不是在真正更新可观察对象,而是在其包含的对象中添加一个新字段

尝试使用
vm.items.valueHasMutated()将一些属性附加到KO数组内的对象后

var-vm;
window.onload=函数(){
var VM=函数(){
var self=这个;
self.items=ko.observearray();
self.columnNames=ko.computed(函数(){
if(self.items().length==0)
返回[];
var-props=[];
var obj=self.items()[0];
for(obj中的变量名称)
道具推(名称);
返回道具;
});
};
vm=新vm();
ko.应用绑定(vm);
vm.items.push({
“姓名”:“约翰”,
年龄:25岁
});
vm.items.push({
“姓名”:“摩根”,
年龄:26
});
对于(var i=0;i

可观察数组中没有“新”项,因此不会触发可观察数组。您可以尝试手动触发更新。
var vm;

window.onload = function() {
var VM = function () {
    var self = this;
    self.items = ko.observableArray();
    self.columnNames = ko.computed(function () {
        if (self.items().length === 0)
            return [];
        var props = [];
        var obj = self.items()[0];
        for (var name in obj)
            props.push(name);
        return props;


    });

};
vm = new VM();

ko.applyBindings(vm);

vm.items.push({
    'Name': 'John',
    'Age': 25
});
vm.items.push({
    'Name': 'Morgan',
    'Age': 26
});

// Add an extra property to each object
for (var i = 0; i < vm.items().length; i++) {
        vm.items()[i].Weight = '50kg';
}
// ????? Table should update with new column 'Weight'

}