Kendo Datasource - Backbone - 对骨干模型所做的更改未在数据源中同步

时间:2014-02-24 18:03:16

标签: javascript backbone.js kendo-datasource

我有许多实例,其中我的Kendo Datasource< - >骨干连接按预期工作,但我遇到了一个我希望有人了解更多的情况。

当从服务器同步模型或集合时,数据源也会更新,并且相应的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'在此骨干视图的initialize方法中定义。它没有看到对“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 Rocks!

1 个答案:

答案 0 :(得分:0)

我猜是有时间问题。也许,在它不工作的情况下,数据源的初始化不正确?

您在底部提供的代码是您应该如何执行的。 From the docs你可以阅读kendo.Backbone.DataSource提供了获得双向绑定的魔力。没有这个,剑道ui不知道来自骨干集合的变化事件。他们提供的示例代码与您在此处的建议非常相似。

我也想对这一行发表评论:

  

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

Backbone.Events系统的一个美妙之处:它不需要往返服务器,以便UI与变化保持同步。只要您处理基本的收集活动addremovechange等,就可以在不与服务器通信的情况下使您的界面保持最新状态。