Knockout - 将值写入ko.computed [英] Knockout - write a value to a ko.computed

查看:562
本文介绍了Knockout - 将值写入ko.computed的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Knockout中构建了一个非常数据/号码的应用程序。我目前收到错误:

I've built a very data/number heavy app in Knockout. I'm currently getting the error:


未捕获错误:无法将值写入ko.computed,除非
指定了'写'选项。如果你想读取当前值,请不要
传递任何参数。

Uncaught Error: Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.

当我的自定义bindingHandler发生这种情况时(将数字格式化为大形式,即123,345,678,987)尝试回写原始输入,显示计算函数的值。

This is happening when my custom bindingHandler (which formats the numbers into 'large' form, ie. 123,345,678,987) tries to write back to the original input which displays the value of a computed function.

输入元素中显示的值:

self.value = ko.computed(function(){
    return self.chosenAge().population; // 'fetched' from an array.
});

绑定处理程序:

ko.bindingHandlers.largeNumber = {
    init: function(element, valueAccessor) {
        numberInit(element);
        var value = valueAccessor();
        var interceptor = ko.computed({
            read: function() {
                // inject number formatting
                return numeral(ko.unwrap(value)).format('0,0');
            },
            write: function(newValue) {
                // remove formatting when writing a new value
                value(numeral().unformat(newValue));
            }
        });
        // display new value in target element
        if(element.tagName.toLowerCase() == 'input' ) {
            ko.applyBindingsToNode(element, {
                value: interceptor
            });
        }
        else {
            ko.applyBindingsToNode(element, {
                text: interceptor
            }); 
        }
    }
};


推荐答案

您需要指定一个'write'选项ko.computed函数。请参阅有关计算可观察量的文档。绑定处理程序与您的值无法更新无关。你的计算结果应该是这样的:

You need to specify a 'write' option in your ko.computed function. Please see the documentation on computed observables. Your binding handler has nothing to do with your value failing to update. Your computed should look something like this:

self.value = ko.computed(function(){
    read: function () {
        return self.chosenAge().population; // 'fetched' from an array.
    },
    write: function (value) {
        //update your self.chosenAge().population value here
    },
    owner: self
});

希望这有帮助。

这篇关于Knockout - 将值写入ko.computed的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆