1

我想要一个包含值的数组,我的模型中的每个对象都有一个“真”。

正如您在我的JSFiddle - Hardcoded working中看到的那样,我目前已经对这些值进行了硬编码,然后它就可以工作了,即“2 级”表从一开始就被折叠起来。

$scope.dayDataCollapse = [true, true, true, true, true, true];

$scope.dayDataCollapseFn = function () {
    for (var i = 0; $scope.storeDataModel.storedata.length - 1; i += 1) {
        $scope.dayDataCollapse.append('true');
    }
};

但是当我用一个空数组和一个函数(如上所示)替换硬编码来为我填充它时,这意味着为 storeDataModel 中的每个商店附加“true”,它失败了。所有 2 级表格从一开始就展开,但可以通过单击两次来折叠它们(一次用于向数组添加值,一次用于折叠)。

还尝试了“真实”功能......:

function dayDataCollapseFn() {
    for (var i = 0; $scope.storeDataModel.storedata.length - 1; i += 1) {
        $scope.dayDataCollapse.append('true');
    }
};

...但我无法让 $scope.dayDataCollapse 初始填充。

我该如何解决这个问题?

4

2 回答 2

2

你的for循环不正确。中间的表达式被评估为真/假,但您刚刚将它编码为一个常量值(好吧,无论如何,对于函数的任何调用都是常量)。尝试这个:

function dayDataCollapseFn() {
    for (var i = 0; i < $scope.storeDataModel.storedata.length; i += 1) {
        $scope.dayDataCollapse.push(true);
    }
};

如果模型有一个元素,您的函数根本不会做任何事情,如果模型有零个或多个元素,则使用“慢速脚本”警告锁定浏览器。

另请注意,您应该使用true布尔常量,而不是字符串'true'

编辑——还要注意它是.push(),不是.append()

于 2013-07-26T13:23:56.467 回答
0

@Pointy 让我朝着正确的方向前进……谢谢!=)

...然后我解决了最后一件事。

我忘记了我使用了否定,即 data-ng-show="!dayDataCollapse[$index]" 因为我首先使用了 collapse="dayDataCollapse[$index]" 。然后我删除了崩溃,因为它不能很好地协同工作。

无论如何......因为我删除了爆炸(!)我也可以使用 false 而不是 true 然后当然也可以在 $scope.selectTableRow() 函数中切换布尔值。

最后一件事是我有 if-else,其中 if 语句检查 dayDataCollapse 是否未定义,然后检查逻辑的 else。当然,逻辑没有第一次触发,因为它是未定义的。

使其工作的功能......:

    $scope.dayDataCollapseFn = function () {
    $scope.dayDataCollapse = [];
    for (var i = 0; i < $scope.storeDataModel.storedata.length; i += 1) {
        $scope.dayDataCollapse.push(false);
    }
};


$scope.selectTableRow = function (index, storeId) {
    if ($scope.dayDataCollapse === undefined) {
        $scope.dayDataCollapseFn();
    }

    if ($scope.tableRowExpanded === false && $scope.tableRowIndexCurrExpanded === "" && $scope.storeIdExpanded === "") {
        $scope.tableRowIndexPrevExpanded = "";
        $scope.tableRowExpanded = true;
        $scope.tableRowIndexCurrExpanded = index;
        $scope.storeIdExpanded = storeId;
        $scope.dayDataCollapse[index] = true;
    } else if ($scope.tableRowExpanded === true) {
        if ($scope.tableRowIndexCurrExpanded === index && $scope.storeIdExpanded === storeId) {
            $scope.tableRowExpanded = false;
            $scope.tableRowIndexCurrExpanded = "";
            $scope.storeIdExpanded = "";
            $scope.dayDataCollapse[index] = false;
        } else {
            $scope.tableRowIndexPrevExpanded = $scope.tableRowIndexCurrExpanded;
            $scope.tableRowIndexCurrExpanded = index;
            $scope.storeIdExpanded = storeId;
            $scope.dayDataCollapse[$scope.tableRowIndexPrevExpanded] = false;
            $scope.dayDataCollapse[$scope.tableRowIndexCurrExpanded] = true;
        }
    }

更新了 JSFiddle


于 2013-07-26T15:21:59.340 回答