1

モデル内のオブジェクトごとに「true」の値を持つ配列が必要です。

私の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 のテーブルはすべて最初から展開されていますが、2 回クリックすると折りたたむことができます (1 回は配列に値を追加するため、もう 1 回は折りたたむためです)。

「実際の」関数でも試してみました...:

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

...しかし、最初に $scope.dayDataCollapse を設定することはできません。

どうすればこれを解決できますか?

4

2 に答える 2

2

あなたのforループは正しくありません。中間の式は true/false で評価されますが、定数値になるようにコーディングしただけです (とにかく、関数の呼び出しに対して定数です)。これを試して:

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

モデルに要素が 1 つある場合、関数は何も実行せず、モデルに要素が 0 個または複数個ある場合、「スクリプトが遅い」という警告でブラウザーがロックされます。

trueまた、文字列ではなくブール定数を使用する必要があることに注意してください'true'

編集.push()—ではないことにも注意してください.append()

于 2013-07-26T13:23:56.467 に答える
0

@Pointyは私を正しい方向に導きました...ありがとう!=)

...そして、最後の問題を解決しました。

最初に collapse="dayDataCollapse[$index]" を使用していたので、否定、つまり data-ng-show="!dayDataCollapse[$index]" を使用したことを忘れていました。次に、一緒にうまく機能しなかったため、崩壊を削除しました。

とにかく...強打 (!) を削除したので、true の代わりに false を使用して、もちろん $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 に答える