我有一个带有两个多选小部件的 View ,其值(region_edu_admin,edu_admin)和数据源(region_edu_admins_ds,edu_admins_ds)绑定(bind)(通过数据绑定(bind))到 ViewModel。在 region_edu_admin 的更改事件 (regionEduAdminChanged) 中,我尝试使用 set 方法重新加载 edu_admin 的小部件数据源,即 edu_admins_ds。虽然我确实进入了 newEduAdminsDS(),但数据源并没有重新加载。任何关于我在这里遗漏的想法将不胜感激!你可以看到下面的代码:
/* 查看模型 */
var LabsSearchVM = kendo.observable({
region_edu_admins_ds: newRegionEduAdminsDS(),
edu_admins_ds: newEduAdminsDS(),
region_edu_admin: "",
edu_admin: "",
regionEduAdminChanged: function(e) {
this.set("edu_admins_ds", newEduAdminsDS());
}
});
/* 看法 */
<label for="region_edu_admin">Περιφερειακή Διεύθυνση Εκπαίδευσης</label>
<select id="sl_region_edu_admin"
name="region_edu_admin"
data-role="multiselect"
data-auto-bind="false"
data-value-primitive="true"
data-text-field="name"
data-value-field="name"
data-bind="source: region_edu_admins_ds, value: region_edu_admin, events: {change : regionEduAdminChanged }"
data-filter="contains"
multiple="multiple">
</select>
<label for="edu_admin">Διεύθυνση Εκπαίδευσης</label>
<select id="sl_edu_admin"
name="edu_admin"
data-role="multiselect"
data-auto-bind="false"
data-text-field="name"
data-value-field="name"
data-bind="source: edu_admins_ds, value: edu_admin"
data-filter="contains"
multiple="multiple">
</select>
/* newEduAdminsDS() 函数 */
function newEduAdminsDS() {
var edu_admins_ds = new kendo.data.DataSource({
transport: {
read: {
url: "api/edu_admins",
type: "GET",
dataType: "json"
}
},
schema: {
data: "data",
model: {
id: "edu_admin_id",
fields: {
edu_admin_id: { editable: false },
name: { editable: false },
region_edu_admin_id: { editable: false },
region_edu_admin: { editable: false }
}
}
}
});
return edu_admins_ds;
}
最佳答案
您不需要重新创建 DataSource。您需要做的就是告诉 read()
再次重新加载数据。更改regionEduAdminChanged
在你的 observable 中起作用:
regionEduAdminChanged: function(e) {
this.edu_admins_ds.read();
}
关于mvvm - 剑道 ui mvvm : dynamically update multiselect datasource inside View Model' s change event,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23908777/