【发布时间】:2015-01-14 22:49:50
【问题描述】:
我有一个 AngularJS 应用程序,我想在其中编辑由 ASP Web API 通过 BreezeJS 公开的 Date 对象。当我尝试在 HTML 表单中编辑此字段时,它并不能正常工作。它似乎编辑了对象的一部分,或者根本没有绑定到日期输入类型。
我想知道用 BreezeJS 在 HTML 表单中编辑日期字段的最佳方法是什么。我找不到任何有关如何以适当方式解决此问题的资源。
我自己的猜测是:
- 使用基于原始日期和 getter/setter 的额外字段扩展 Breeze 实体。
- 不在 WebAPI 中使用日期字段,但感觉不对。
代码
在我的 Angular 控制器中,我通过存储库模式从 Breeze 获取对象:
datacontext.session.getById(id)
.then(function (data) {
return vm.session = data;
});
之后,vm.session 被 Breeze 对象填充,如下所示:
[{
"$id":"1",
"$type":"TestApp.Model.Session, TestApp.Model",
"Id":3,
"Name":"Second session",
"StartDate":"2014-10-12T00:00:00.000",
}]
现在在我的 HTML 表单中我是这样绑定的:
<input type="date" ng-model="vm.session.startDate" placeholder="Start Date">
如果我在输入字段。
并且 ng-model 字段的大小写是正确的,因为我使用它来创建 camelCase 字段:
breeze.NamingConvention.camelCase.setAsDefault();
所以这相当简单......我会尽快制作一个 JSFiddle 或 Plunker
【问题讨论】:
-
你的代码在哪里?如果您熟悉 Angular.js,这应该非常简单 - Breeze.js 不做任何事情来绑定数据,只做跟踪等,所以它应该可以工作......
-
我已经在问题中添加了我的代码。正如您所说,这应该非常简单。然而,当结合 Angular 将数据绑定到 Date 字段时,Breeze 似乎做了一些奇怪的事情。我通常不会单独使用 Angular 和 Dates。但我目前正在试用 BreezeJS,所以我现在遇到了这个问题。
-
在控制台中输入
typeof vm.session.startDate会发生什么?是日期还是字符串? -
它说“对象”,但当我查看原型时,它看起来像一个 Date 对象。也许 Breeze 将它转换为它自己的 Date 类型,这可以解释为什么它说“对象”?
标签: javascript angularjs asp.net-web-api breeze breeze-sharp