使用Breeze.js,是否有办法创建一个未初始化的实体并将其绑定到一个"添加新的"形成?

时间:2012-12-05 05:46:15

标签: breeze

到目前为止,我在添加新实体时看到的所有示例都将执行以下步骤:

  1. 创建一系列绑定到屏幕控制的“new-”变量。
  2. 当用户想要提交添加内容时,创建一个未初始化的新实体。
  3. 将“new-”变量逐个复制到新实体的每个成员。
  4. 将新实体推送到经理的实体列表中。
  5. 保存更改。
  6. 清除所有“新”变量。
  7. 由于许多原因,这是有问题的。除了屏幕控制之外,还必须维护这些“新”变量。当服务器端实体更改时,必须手动更改它们。这非常耗时且容易出错。

    我希望能够首先创建一个未初始化的新实体,并立即将其绑定到屏幕控件上,而不使用带有“new-”前缀的那些变量。当用户想要提交添加内容时,将新实体推送到经理的实体列表中,然后保存更改。然后立即将屏幕上的控件绑定到新创建的未初始化实体。

    这样,我们可以避免在视图模型中处理单个实体属性,从而产生更强大的代码,并节省大量时间。

    现在,当文档准备就绪时,用于创建新实体的元数据不可用。如果我下载它,我必须处理异步完成,然后才能将新实体绑定到屏幕控件上。

    所以我的问题是:有没有办法通过初始HTML下载下载元数据,这样我就可以在不等待的情况下创建一个未初始化的新实体,并立即将其绑定到屏幕上的HTML控件上?

1 个答案:

答案 0 :(得分:2)

我不确定未经初始化的新实体是什么意思,但是 - 你可以创建一个像这样的新车:

var newCar = manager.metadataStore.getEntityType("Car").createEntity();
manager.addEntity(newCar);

将控件绑定到newCar。要保存更改,请致电manager.saveChanges();,取消致电manager.rejectChanges();

为了能够与实体合作,breeze需要元数据。如果需要,您可以使用页面本身发送元数据。然后,您可以使用manager.importMetadata()将其导入管理器。唯一的问题是您需要编写一个小应用程序来生成元数据字符串(在构建期间),以便以后可以将其传递给importMetadata()。请查看MetadataStore Class API以获取更多信息。