javascript - Durandal TodoMVC - 无法将值写入 ko.compulated

标签 javascript design-patterns module durandal todomvc

我正在尝试使用Durandal构建todo应用程序的一个版本(包括 Knockout + RequireJS )来自 TodoMVC template 。我意识到待办事项应用程序并没有真正展示 Durandal 的功能,但我正在学习道路上,并认为这将是一个很好的第一个项目。

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

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.")

我还附上了一张在控制台中显示这些内容的图像。

ko.computed errors

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

更新:大部分 Knockout 代码借用自 Knockout+Require TodoMVC 项目 https://github.com/tastejs/todomvc/tree/gh-pages/labs/dependency-examples/knockoutjs_require/

感谢您的宝贵时间。

最佳答案

我认为您误读了控制台。

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

// writeable computed observable to handle marking all complete/incomplete
self.allCompleted = ko.computed({
    // -- trimmed --
});

您在控制台中看到的不是无法写入值错误;而是它是计算属性的调试输出 - 即它的函数定义。作为引用,这里是直接来自 knockout (2.2.1) source 的依赖可观察量的函数定义。 :

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;
    }
}

您在控制台中看到的是此代码的缩小版本。

如果您想查看属性返回的,您必须调用它。

关于javascript - Durandal TodoMVC - 无法将值写入 ko.compulated,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16550727/

相关文章:

java - 如果函数具有已定义的装饰模式,则调用该函数

php - Yii 框架 - 如何为模块的所有 Controller 指定相同的访问规则?

c - C 中的 switch 语句和 getopt() 函数

python - 在 OSX 上安装 Python 模块/脚本

javascript - 两个提交按钮,其中一个始终隐藏,如何按 Enter 并使用正确的提交按钮

javascript - 读取 d3 键值

javascript - 当form在IE11中定位一个html并操作另一个html时,它最后打开两个页面

java - 为什么我们需要 Memento 模式中的 Caretaker 类?真的有那么重要吗?

javascript - 什么符号/标记集代表 JavaScript 中不为 null 或未定义的所有内容?

c# - 多线程设计模式