1

我的 Kendo Datasource <-> Backbone 连接在许多情况下都按预期工作,但我遇到了一种情况,希望有人知道更多。

从服务器同步模型或集合时,数据源也会更新,相应的 Kendo 控件也会更新。

但是,如果您已经加载了一个集合,并且您遍历该集合,对该集合中的模型进行更改,则链接的 DataSource 似乎没有得到更改。

例子:

我有一组显示为复选框选项的“标签”。我想根据来自服务器的其他数据将其中一些复选框显示为“已选中”(在这种情况下,我正在加载产品 - 并希望显示选择了哪些颜色):

this.colors.each(function (me) {
  me.set('selected', '');
  if ( _.findWhere(self.model.get('colors'), {id: me.id} ) ) {
    me.set('selected', 'checked');
  };
})

$('#colors').kendoListView({
  dataSource: this.colors_datasource,
  template: '<div class="checkbox"><input type="checkbox" value="#: id #" #:selected#> #: name #</div>'
});

'this.colors_datasource' 在这个主干视图的初始化方法中定义。它没有看到对集合“this.colors”中的主干模型进行这些更改。我认为这是因为模型没有同步到服务器。

如果我在这两个代码块之间添加定义,它会起作用:

this.colors.each(function (me) {
  me.set('selected', '');
  if ( _.findWhere(self.model.get('colors'), {id: me.id} ) ) {
    me.set('selected', 'checked');
  };
})

this.colors_datasource = new kendo.Backbone.DataSource({
  collection: this.colors
});

$('#colors').kendoListView({
  dataSource: this.colors_datasource,
  template: '<div class="checkbox"><input type="checkbox" value="#: id #" #:selected#> #: name #</div>'
});

所以,我的问题:这是唯一的解决方案,还是有办法告诉已经定义的 DataSource 重新构建自己?

谢谢 - StackOverflow 摇滚!

4

1 回答 1

0

我猜有一个时间问题。也许,在它不工作的情况下,数据源被错误地初始化了?

您在底部提供的代码是您应该如何做的。从文档中,您可以阅读 kendo.Backbone.DataSource 提供了获得 2 向绑定的魔力。没有这个,kendo ui 不知道来自主干集合的更改事件。他们在那里提供的示例代码与您在此处建议的非常相似。

我还想评论这一行:

我认为这是因为模型没有同步到服务器。

Backbone.Events 系统的一大优点是:它不需要往返服务器以使 UI 与更改保持同步。只要您处理基本的收集事件add, remove,change等,您就可以在不与服务器对话的情况下使您的界面保持最新。

于 2014-02-24T18:21:24.577 回答