我有许多实例,其中我的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!
答案 0 :(得分:0)
我猜是有时间问题。也许,在它不工作的情况下,数据源的初始化不正确?
您在底部提供的代码是您应该如何执行的。 From the docs你可以阅读kendo.Backbone.DataSource提供了获得双向绑定的魔力。没有这个,剑道ui不知道来自骨干集合的变化事件。他们提供的示例代码与您在此处的建议非常相似。
我也想对这一行发表评论:
我认为这是因为模型没有与服务器同步。
Backbone.Events系统的一个美妙之处:它不需要往返服务器,以便UI与变化保持同步。只要您处理基本的收集活动add
,remove
,change
等,就可以在不与服务器通信的情况下使您的界面保持最新状态。