从Typescript kendo.data.ObservableObject获取变量的新副本

时间:2015-11-02 18:38:45

标签: javascript kendo-ui typescript

我有一个kendo.data.ObservableObject,它有两个Date字段--EventDate和EventEndDate。当EventDate发生变化时,我想设置EventDateDate = EventDate + 7天。

我有以下代码:

    //set calculated fields
    modelObservable.bind("change", function (e) {
        if (e.field == "EventDate") {
            //get the date
            var endDate = <Date>this.get("EventDate");
            //add 7
            endDate.setDate(endDate.getDate() + 7);
            //bind
            this.set("EventEndDate", endDate);
        }
    });

似乎有效,但是我最近才发现了一个错误(通过验证失败),因为一旦这个函数完全完成,EventDate和EventEndDate是相同的。据推测

this.get("EventDate");

正在创建引用而不是新值 - 我该如何解决这个问题呢?

目前的结果如下:

  1. 将活动日期设为2015年11月1日
  2. 处理程序触发并计算新日期为2015年11月11日
  3. 在网页上,活动日期为2015年11月1日,结束日期为08/11/2015(正确)
  4. 但是在Observable对象中,事件日期和事件结束日期都是08/11/2015,这些是我们将Observable解析为JSON并发送到我们的WCF服务后保存到数据库的内容

1 个答案:

答案 0 :(得分:1)

是的,您需要创建一个新的Date对象,否则您需要修改现有的对象实例:

// Set calculated fields
modelObservable.bind("change", function (e) {
    if (e.field == "EventDate") {
        // get the date
        var eventDate = <Date>this.get("EventDate");
        // Clone Date object
        var result = new Date(eventDate.getTime());
        // add 7
        result.setDate(result.getDate() + 7);
        // bind
        this.set("EventEndDate", result);
    }
});