0

我在 viewmodel 有这段代码:

self.events = ko.observableArray();

function getAllEvents() {
    dataservice.events.getAll()
        .then(queryEventsSucceeded)
        .fail(queryEventsFailed);
}

function queryEventsSucceeded(data) {
    self.events(data.results);
}

function queryEventsFailed(error) {
    logger.logError(error.message, "Error retrieving events");
}

然后我有这样的看法:

<div data-bind="wijevcal: { appointments: events }"></div>

但是此代码会引发超出最大调用堆栈大小的异常。

当我用像下面的代码这样的硬编码事件填充 self.events() 时,它可以完美地工作:

self.events([{
    id: "event1",
    subject: "Green event.",
    start: new Date(2013, 4, 18, 9),
    end: new Date(2013, 4, 18, 11),
    allday: true,
    description: "The green event.",
    color: "green"
}]);

我无法弄清楚发生了什么...

4

1 回答 1

0

我的猜测是,Wijmo 组件在遍历绑定对象图时无法处理具有循环引用的对象(例如,客户有订单,每个订单都有一个客户)。即使没有导航属性的实体类型也有entity.entityAspect.entity循环引用。

你必须想办法打破这个循环。你可以联系 Wijmo 的人,看看他们推荐什么。

直接的解决方法不是那么漂亮:您必须将事件映射到一个中间对象(每个“ItemViewModel”)中,该对象准确地公开了您绑定所需的信息。这是额外的工作,偶尔也可以,但不是你想经常做的事情。

于 2013-05-18T17:24:43.980 回答