【发布时间】:2020-06-12 07:50:44
【问题描述】:
我有一个 kendo 包装网格,其中本地 kendo 数据源 指向 vue 状态。 有一个按钮“更新”,它将更新状态,以便网格也将更新并且它可以工作。
但是,如果我首先单击按钮“Test”(只是对状态的赋值相同)然后单击“Update”,奇怪的是它不起作用网格没有变化。
我终于找到原因是在点击“Test”然后“Update”之后,vue状态更新了但是剑道网格数据源不会(超出意外同步)。 现在临时解决方案是我必须手动将状态分配给数据源,以便更新网格。
回购:http://dojo.telerik.com/aGENIHuW
我的问题是,为什么在点击“Test”后,kendo 网格数据源被缓存并且与 vue 状态不同步? 如果我不点击“测试”,它们会一直同步。 仅当对状态进行“相同的值分配”时才会出现问题。如果是“不同的赋值”,没问题。
<div id="vueapp">
<kendo-datasource ref="dsDS" :data="localDataSource"></kendo-datasource>
<kendo-grid :data-source-ref="'dsDS'">
<kendo-grid-column :field="'ProductID'"
:title="'ID'"
:width="40"></kendo-grid-column>
<kendo-grid-column :field="'ProductName'"></kendo-grid-column>
<kendo-grid-column :field="'UnitPrice'"
:title="'Unit Price'"
:width="120"
:format="'{0:c}'"></kendo-grid-column>
<kendo-grid-column :field="'UnitsInStock'"
:title="'Units In Stock'"
:width="120"></kendo-grid-column>
<kendo-grid-column :field="'Discontinued'" :width="120"></kendo-grid-column>
</kendo-grid>
<input type="button" value="Test" @click="test" />
<input type="button" value="Update" @click="update" />
</div>
new Vue({
el: '#vueapp',
data: {
localDataSource: [{
"ProductID": 1,
"ProductName": "Chai",
"UnitPrice": 18,
"UnitsInStock": 39,
"Discontinued": false,
},
{
"ProductID": 2,
"ProductName": "Chang",
"UnitPrice": 17,
"UnitsInStock": 40,
"Discontinued": false,
},
{
"ProductID": 3,
"ProductName": "Aniseed Syrup",
"UnitPrice": 10,
"UnitsInStock": 13,
"Discontinued": false,
}
]
},
methods: {
test: function(e) {
this.localDataSource = JSON.parse(JSON.stringify(this.localDataSource)); //same value assignment
console.log('test');
},
update: function(e) {
this.localDataSource.splice(0, 1, this.localDataSource[1]); //replace the first object with second object
},
}
})
更新:
让我在下面强调我的问题:
为什么 test2() + update() => 有效!
但是 test() + update() => 不行
它们的不同只是 test2() 的值赋值 'hello'
methods: {
test: function(e) { //same value assignment
let ds = JSON.parse(JSON.stringify(this.localDataSource));
this.localDataSource = JSON.parse(JSON.stringify(ds));
},
test2: function(e) { //different value assignment
let ds = JSON.parse(JSON.stringify(this.localDataSource));
ds[0]['ProductName'] = 'hello';
this.localDataSource = JSON.parse(JSON.stringify(ds));
},
update: function(e) {
this.localDataSource.splice(0, 1, this.localDataSource[1]); //replace first row with second row
}
}
【问题讨论】:
标签: vue.js kendo-ui kendo-grid kendo-datasource