Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 剑道数据源-主干-对主干模型所做的更改未在数据源中同步_Javascript_Backbone.js_Kendo Datasource - Fatal编程技术网

Javascript 剑道数据源-主干-对主干模型所做的更改未在数据源中同步

Javascript 剑道数据源-主干-对主干模型所做的更改未在数据源中同步,javascript,backbone.js,kendo-datasource,Javascript,Backbone.js,Kendo Datasource,我有很多例子表明我的Kendo数据源主干网连接按预期工作,但我遇到了希望有人了解更多的情况 从服务器同步模型或集合时,数据源也会更新,相应的剑道控件也会更新 但是,如果已经加载了一个集合,并且在该集合中循环,对该集合中的模型进行更改,则链接的数据源似乎没有得到更改 例如: 我有一个“标签”集合,显示为复选框选项。我希望根据来自服务器的其他数据将其中一些复选框显示为“已选中”(在本例中,我正在加载产品,并希望显示选择的颜色): this.colors.each(函数(me){ me.set('选定

我有很多例子表明我的Kendo数据源主干网连接按预期工作,但我遇到了希望有人了解更多的情况

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

但是,如果已经加载了一个集合,并且在该集合中循环,对该集合中的模型进行更改,则链接的数据源似乎没有得到更改

例如:

我有一个“标签”集合,显示为复选框选项。我希望根据来自服务器的其他数据将其中一些复选框显示为“已选中”(在本例中,我正在加载产品,并希望显示选择的颜色):

this.colors.each(函数(me){
me.set('选定','');
if(u.findWhere(self.model.get('colors'),{id:me.id})){
me.set('selected','checked');
};
})
$(“#颜色”).kendoListView({
dataSource:this.colors\u dataSource,
模板:'#:名称#'
});
“this.colors\u数据源”是在此主干视图的初始化方法中定义的。在“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>'
});
this.colors.each(函数(me){
me.set('选定','');
if(u.findWhere(self.model.get('colors'),{id:me.id})){
me.set('selected','checked');
};
})
this.colors\u datasource=new kendo.Backbone.datasource({
收藏:这是我的最爱
});
$(“#颜色”).kendoListView({
dataSource:this.colors\u dataSource,
模板:'#:名称#'
});
所以,我的问题是:这是唯一的解决方案,还是有办法告诉已经定义的数据源重新构建自己


谢谢-堆叠溢出岩石

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

您在底部提供的代码是您应该如何做的。您可以阅读kendo.Backbone.DataSource提供了获得双向绑定的魔力。没有这一点,剑道ui就不知道来自主干集合的更改事件。它们提供的示例代码与您在这里建议的非常相似

我还想评论一下这句话:

我推测这是因为模型没有同步到服务器


主干网事件系统的一个优点是:它不需要往返服务器才能使UI与更改保持同步。只要您处理基本收集事件
添加
删除
更改
,您就可以在不与服务器对话的情况下保持界面的最新状态。

感谢您的回复。我认为没有时间问题。这是一组复选框。集合是在其他地方获取/填充的,无论我将数据源链接到何处,它都会正确地绘制出来。这个问题是,稍后,当我更改该集合中的模型时,数据源没有看到该更改,因此不会触发剑道小部件的重画。关于您对事件的评论,通常情况下,数据源会看到这些事件并按预期反应。例如,如果我要将一个新模型添加到此集合(列表中的一个新复选框),这将正确地重新绘制。因此,虽然它似乎是对集合上的事件做出反应,但数据源看不到模型触发的更改事件。
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>'
});