首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Durandal TodoMVC -不能将值写入ko.computed

Durandal TodoMVC -不能将值写入ko.computed
EN

Stack Overflow用户
提问于 2013-05-14 18:56:14
回答 1查看 3K关注 0票数 2

我正在尝试使用杜兰达尔 (包括淘汰赛 + RequireJS)从TodoMVC模板构建todo应用程序的一个版本。我意识到todo应用并不真正展示Durandal的功能,但我正在学习,并认为这将是一个很好的第一个项目。

无论如何,在这个过程中,我无意中发现了一个我无法解决的错误(见下文)。

代码语言:javascript
复制
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.")

我还附加了一个在控制台中显示这些的图像。

您可以在https://github.com/robksawyer/durandal-todo找到源代码。todo视图模型位于https://github.com/robksawyer/durandal-todo/blob/master/viewmodels/todos.js

更新:大部分代码都是从要求/的Knockout+Require TodoMVC项目借来的。

耽误您时间,实在对不起。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-15 06:16:54

我觉得你看错控制台了。

例如,"allCompleted“是视图模型上的一个属性,它被声明为一个依赖的可观测(即”计算“):

代码语言:javascript
复制
// writeable computed observable to handle marking all complete/incomplete
self.allCompleted = ko.computed({
    // -- trimmed --
});

您在控制台中看到的不是Cannot write a value错误,而是computed属性的调试输出-即它的函数定义。作为参考,下面是直接从敲除(2.2.1)源中直接观察到的依赖函数的定义

代码语言:javascript
复制
function dependentObservable() {
    if (arguments.length > 0) {
        if (typeof writeFunction === "function") {
            // Writing a value
            writeFunction.apply(evaluatorFunctionTarget, arguments);
        } else {
            throw new 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.");
        }
        return this; // Permits chained assignments
    } else {
        // Reading the value
        if (!_hasBeenEvaluated)
            evaluateImmediate();
        ko.dependencyDetection.registerDependency(dependentObservable);
        return _latestValue;
    }
}

您在控制台中看到的是该代码的小型化版本。

如果要查看属性返回的值,则必须调用它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16550727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档