1

我在 Breeze 中创建计算值并使用 Knockout 绑定到它们时遇到问题。

我正在使用 NoDb 示例项目,可以在此处下载, Breeze 文档中的扩展实体文章是我的主要信息来源。

在 todo.datacontext.js 文件中,我进行了以下更改:(我已经包含了第一行和最后一行,以指导我将代码放置在何处)

...
configureManagerToSaveModifiedItemImmediately();

metadataStore.registerEntityTypeCtor('TodoItem', function () { }, todoItemInitializer);

function todoItemInitializer(todoItem) {
    todoItem.participantName = ko.computed(function () {
        return 'John' + ' ' + 'Smith';
    });
};

var datacontext = {
...

在 Index.html 中,我添加了:

...
<ul data-bind="foreach: todos">
   <li>
       <p data-bind="text: participantName" />
       <input type="checkbox" data-bind="checked: isDone" />
...

但是,我收到此错误:

检索待办事项列表时出错:无法解析绑定。消息:ReferenceError:参与者名称未定义;绑定值:文本:参与者名称

我也注意到,如果我执行这个:

metadataStore.getEntityType('TodoItem');

它告诉我这种类型不存在,即使我正在注册它。

有任何想法吗?

4

1 回答 1

0

深入研究文档和示例项目,我发现如果服务器不提供任何元数据,则必须在客户端手动创建和注册。请参阅 todo.model.js。以下是代码中最相关的部分:

var et = new EntityType({
            shortName: "TodoItem",
            namespace: "NoDb.Models",
            autoGeneratedKeyType: AutoGeneratedKeyType.Identity
        });

...

store.addEntityType(et);
store.registerEntityTypeCtor("TodoItem", null, todoItemInitializer);

然后初始化程序按预期工作,并正确识别 ko.computed 值。当然,这会让你不得不声明你将要使用的每一个属性。常规操作和绑定在没有任何此代码的情况下工作。

于 2013-02-15T23:11:41.910 回答