在动态添加到knockout中的observable数组时,“写”不能在ko.computed上工作

时间:2013-02-26 19:38:08

标签: javascript knockout.js

考虑this fiddle

我想动态地将ko.computed添加到ko.observableArray

self.items.push(ko.computed({
    read: function () {
        return items[i];
    },
    write: function (value) {
        //some write action
        alert(value);
    }
}));

我需要将write函数从ko.computed管理到数组中。 使用此代码,read非常有用,但 knockout 不会调用write函数,因此不会调用alert

我错过了什么吗?有解决方法吗?

1 个答案:

答案 0 :(得分:0)

我决定创建另一个 ViewModel

function item(value) {
    var self = this;

    self.value = ko.observable(value);
    self.computed = ko.computed({
        read: self.value,
        write: function (value) {
            alert(value);
            self.value(value);
        }
    });
}

function header(items) {
    var self = this;

    self.items = ko.observableArray();

    for (var i = 0; i < items.length; i++) {
        self.items.push(new item(items[i]));
    }
}

HTML:

<ul data-bind="foreach: items">
    <li>
        <input type="text" data-bind="value: computed" />
    </li>
</ul>

the fiddle正在工作。