Javascript 与剑道成角度,异步使用栅格值
好的,我很确定我知道我在这里需要做什么,但我不知道怎么做。基本上,我有一个网格,我想让一个键列绑定到一个键/值数组,这是我以前用剑道做过的(不使用Angular),我知道当我异步创建键/值数组时,需要先完成这个网格,然后我才能用剑道显示它们,我以前用承诺做过 所以这里我有同样的问题,只涉及到角度。我需要获取数据数组并将其格式化为剑道网格列可以消化的格式,因此我的控制器代码没有问题:Javascript 与剑道成角度,异步使用栅格值,javascript,angularjs,asynchronous,kendo-grid,Javascript,Angularjs,Asynchronous,Kendo Grid,好的,我很确定我知道我在这里需要做什么,但我不知道怎么做。基本上,我有一个网格,我想让一个键列绑定到一个键/值数组,这是我以前用剑道做过的(不使用Angular),我知道当我异步创建键/值数组时,需要先完成这个网格,然后我才能用剑道显示它们,我以前用承诺做过 所以这里我有同样的问题,只涉及到角度。我需要获取数据数组并将其格式化为剑道网格列可以消化的格式,因此我的控制器代码没有问题: var realm = kendo.data.Model.define({
var realm = kendo.data.Model.define({
id: 'realmID',
fields: {
realmID: { editable: false, nullable: true }
realmType: { type: 'string', validation: { required: true } }
}
})
var ds1 = kendoHelpers.dataSourceFactory('realms', realm, 'realmID')
var realmType = kendo.data.Model.define({
id: 'realmTypeID',
fields: {
realmTypeID: { editable: false, nullable: true },
name: { type: 'string', validation: { required: true } }
}
})
var ds2 = kendoHelpers.dataSourceFactory('realms/types', realmType, 'realmTypeID')
$scope.mainGridOptions = {
dataSource: ds1,
editable: true,
navigatable: true,
autoBind:false,
toolbar: [
{ name: "create" },
{ name: 'save' },
{ name: 'cancel' }
],
columns: [
{ field: 'realmID', title: 'ID' }
{ field: 'realmTypeID', title: 'Realm Type', editor: realmTypesDDL, values: $scope.realmTypeValues },
{ command: "destroy" }
]
}
$scope.secondGridOptions = {
dataSource: ds2,
editable: true,
navigatable: true,
toolbar: [
{ name: "create" },
{ name: 'save' },
{ name: 'cancel' }
],
columns: [
{ field: 'realmTypeID', title: 'ID' },
{ field: 'name', title: 'Name' }
{ command: "destroy" }
]
}
ds2.fetch(function () {
$scope.realmTypeValues = [{ text: 'Test', value: "24bc2e62-f761-4e70-804c-bc36fdeced3d" }];
//this.data().map(function (v, i) {
// $scope.realmTypeValues.push({ text: v.name, value: v.realmTypeID})
//});
//$scope.mainGridOptions.ds1.read()
});
function realmTypesDDL(container, options) {
$('<input />')
.appendTo(container)
.kendoDropDownList({
dataSource: ds2,
dataTextField: 'name',
dataValueField: 'realmTypeID'
});
}
但这感觉不是很有棱角感,所以我真的希望有一个更好的解决方案 好吧……我想我已经做得够多了,在没有其他建议的情况下,我将继续采用这种方法。我将把绑定逻辑移动到第二个网格的requestEnd事件,这样就可以在绑定之前填充values数组。我还在这个方法中重新设计值数组。不过这有点奇怪,我认为这个阵法有一些剑道黑魔法在起作用,因为我不能把它设置成一个新的空阵法而不完全破坏它…这就是为什么我在重新填充阵法之前要把所有的东西都弹出。这样,当在第二个网格中删除或编辑某些内容时,第一个网格中的DDL将在回调中更新
function requestEnd(e) {
for (var i = $scope.realmTypeValues.length; i >= 0; i--) $scope.realmTypeValues.pop();
var data;
if (e.type == "read")
data = e.response;
else
data = e.sender.data();
data.map(function (v, i) { $scope.realmTypeValues.push({ text: v.name, value: v.realmTypeID }); });
if ($('#realms').data('kendoGrid') == undefined) {
$('#realms').kendoGrid($scope.mainGridOptions);
}
else
$('#realms').data('kendoGrid').columns[4].values = $scope.realmTypeValues;
}
ds2.bind('requestEnd', requestEnd);
所以我要接受我自己的答案,除非有人有更好的方法 您知道传输对象的read属性也可以是函数吗?我用它来决定什么时候填充东西。是的,我知道,但我不认为这会有什么帮助?我误解了你的要求。
<h2>Realms</h2>
<div id="realms"></div>
<h2>Realm Types</h2>
<kendo-grid options="secondGridOptions"></kendo-grid>
ds2.fetch(function () {this.data().map(function (v, i) {
$scope.realmTypeValues.push({ text: v.name, value: v.realmTypeID})
});
$('#realms').kendoGrid($scope.mainGridOptions);
$scope.mainGridOptions.dataSource.fetch()
});
function requestEnd(e) {
for (var i = $scope.realmTypeValues.length; i >= 0; i--) $scope.realmTypeValues.pop();
var data;
if (e.type == "read")
data = e.response;
else
data = e.sender.data();
data.map(function (v, i) { $scope.realmTypeValues.push({ text: v.name, value: v.realmTypeID }); });
if ($('#realms').data('kendoGrid') == undefined) {
$('#realms').kendoGrid($scope.mainGridOptions);
}
else
$('#realms').data('kendoGrid').columns[4].values = $scope.realmTypeValues;
}
ds2.bind('requestEnd', requestEnd);