【发布时间】:2015-04-10 16:36:10
【问题描述】:
因为我需要访问页面上的月、日和年,所以我有一个带有复合对象 SplitDate 的视图模型。
var SplitDate = function(date) {
var _date = ko.observable(); // the backing field
this.date = ko.computed({ read: _date, write: setDate });
this.year = ko.computed({ read: makeGetter('year'), write: makeSetter('year') });
this.month = ko.computed({ read: getMonth, write: setMonth });
this.day = ko.computed({ read: makeGetter('date'), write: makeSetter('date')
// not showing setters/getters, etc.
....
});
}
在我的视图模型上,我使用这个对象如下;
self.trainingEndDate = ko.observable(new SplitDate());
我遇到的问题是我需要能够为同一页面多次映射来自 ajax 调用的新数据。我尝试让 Knockout Mapping 每次都创建一个新的 SplitDate,但这不起作用。显然,被删除和替换的 SplitDate 是绑定到页面的那个。
所以我创建了一个映射,它会忽略作为 SplitDates 的视图模型属性,而对于那些我只是更新现有控件的日期。
在我需要解开模型并使用 ajax 调用发布它之前,它运行良好。 Knockout Mapping 在忽略属性上设置了一个标志,因此这些属性不包含在未映射的对象中。我正在使用不同的映射选项,它不会“忽略”它们,我还尝试使用“包含”选项将它们添加到其中,但没有奏效。
为什么不显式的“包含”取代隐式的“忽略”?我不应该忽略映射上的这些对象吗?有没有我可以用来调用日期设置器而不是忽略它们的选项?
超越我自己,但是我需要在 SplitDate 中包含一些内容以确保在我得到映射以实际包含它之后正确序列化它吗?
【问题讨论】:
-
能否包含实际执行映射/序列化/反序列化的代码?
标签: knockout.js knockout-mapping-plugin