gpt4 book ai didi

angularjs - 无法在 Angular Bootstrap 模式窗口中获取对剑道网格的引用

转载 作者:行者123 更新时间:2023-12-02 23:28:45 24 4
gpt4 key购买 nike

我正在尝试引用放置在 Bootstrap 模式使用的模板中的剑道网格。当直接放置在应用程序 Controller 的范围中时,相同的网格可以工作,但会从模态实例 Controller 抛出未定义的错误。

有人可以告诉我我做错了什么吗?

var app = angular.module('plunker', ['ui.bootstrap', 'kendo.directives']);

app.controller('MainCtrl', function($scope, $modal) {
$scope.name = 'World';

$scope.mySource = new kendo.data.DataSource({
data: [
{ColumnOne:'One', ColumnTwo:'Two'},
{ColumnOne:'Three', ColumnTwo:'Four'},
{ColumnOne:'Five', ColumnTwo:'Six'}
]
});

$scope.myGridChange = function(){
var selectedRows = $scope.myGrid.select();
console.log($scope.myGrid.dataItem(selectedRows[0]));
};

$scope.items = ['item1', 'item2', 'item3'];

$scope.open = function () {

$modal.open({
templateUrl: 'myGridTemplate.html', //'myTemplate.html',
controller: ModalInstanceCtrl,
resolve: {
items: function () {
return $scope.items;
}
}
});
};
});


var ModalInstanceCtrl = function ($scope, $modalInstance, items) {

$scope.items = items;
$scope.selected = {
item: $scope.items[0]
};

$scope.myTempSource = new kendo.data.DataSource({
data: [
{ColumnOne:'One', ColumnTwo:'Two'},
{ColumnOne:'Three', ColumnTwo:'Four'},
{ColumnOne:'Five', ColumnTwo:'Six'}
]
});

$scope.myTempGridChange = function(){
var selectedRows = $scope.myTempGrid.select();
console.log($scope.myTempGrid.dataItem(selectedRows[0]));
};

$scope.ok = function () {
$modalInstance.close($scope.selected.item);
};

$scope.cancel = function () {
$modalInstance.dismiss('cancel');
};
};

我得到 Cannot call method 'select' of undefined at

var selectedRows = $scope.myTempGrid.select();

这是我的 plnkr 的链接

http://plnkr.co/edit/GUSX6JR9HRvtdSWclvPl?p=preview

最佳答案

在模态之外, Controller 和网格共享相同的范围。但是,当它们位于模态内部时,网格的范围嵌套在 Controller 范围内。不完全确定这是为什么,但这就是为什么它是一个问题。

当您有嵌套作用域时,子作用域将典型地从父作用域继承。使用原型(prototype)继承,当您直接在子作用域上设置某些内容时,它不会覆盖父作用域。因此,当 Kendo 设置 $scope.myTempGrid 时,它只会在子范围上设置,而当您尝试从 Controller 访问它时,它不在那里。

这可能会变得非常困惑,但幸运的是,如果您总是避免将事物直接绑定(bind)到范围,那么您就不应该遇到此类问题。例如,如果您将网格放入父作用域中的某个容器对象中,那么您就不会遇到此问题。

例如:http://plnkr.co/edit/0VFJfp?p=preview

Controller :

...
$scope.container = {};
...

HTML

...
<div kendo-grid="container.myTempGrid">
...

更好的解决方案是始终使用“ Controller 为”语法:http://plnkr.co/edit/Pmjend?p=preview

关于angularjs - 无法在 Angular Bootstrap 模式窗口中获取对剑道网格的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22460573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com