2

angular/breeze の組み合わせをテストしていますが、

RangeError: 最大呼び出しスタック サイズを超えました

すべてのプロパティがチェックされていると想定しているAngularやその他の関数$watchを使用すると、同様のエラーが発生しますfilter:searchText

私が間違っていることに興味があります。または、配列に含まれるプロパティなどが多すぎる場合。

例:

<input type="search" ng-model="searchText" />
<div ng-repeat="station in stationsList | filter:searchText" class="view-list">
    <p>{{station.name}} </p>
</div>

ステーションは次のようなクエリから取得されますbreeze.EntityQuery.from("stations")

編集: 現時点ではこれを行っています: AngularJS の複数の特定のモデル プロパティによるフィルタリング (OR 関係)

うまく機能しますが、コントローラーのコードが増えます。

編集 2: AngularJS を使用して複数のオブジェクトにフィルターを適用する方法は?

これも、ループします。

4

2 に答える 2

1

Breeze エンティティを見ると、それが単なる典型的な JavaScript オブジェクトではなく、_backingStore と entityAspect の下にすべてを隠していることがわかります。Chrome で AngularJS Batarang を使用すると、私が話しているフィールドの爆発をより簡単に確認できます。

エンティティを監視しようとすると、Angular が最初に行うことは、独自の関数を使用してオブジェクトをコピーすることです。これは、entityAspect の深さを調べようとして停止する再帰関数です。

残念ながら、あなたがすでに発見した方法以外の方法については、とにかく知りません。オブジェクトの等価性を優先して、必要な個々のプロパティごとに手動でウォッチを設定しました。

編集:コメントできないので、明確にするために、次のようなものを手動で設定することで、これが意味します。

$scope.foo.integer1 = 4
$scope.foo.string2 = 'bar'
$scope.$watch('[foo.integer1, foo.string2]', someFunctionToHandleChange, true

すべてのケースでフィルターを使用する方がよい理由がわかりませんか?

于 2013-07-09T15:37:08.650 に答える
0

@Hawk - エンティティの循環参照に遭遇しなかったとしても、Angular でリスト内のすべてのオブジェクトのすべてのプロパティをフィルタリング (または監視) することはほとんど賢明ではありません。したがって、これは本当に Angular の問題であり、接線的に Breeze が関係しています。

複数のプロパティでフィルタリングする場合は、最初のリンクであるFiltering by Multiple Specific Model Properties in AngularJS で説明されているフィルタ機能をお勧めします。@Gendalが提案するように、私は個人的にプロパティを個別に監視しません。おそらく、個々のプロパティを監視する方がフィルターよりも望ましいユースケースがあるでしょう。そのようなケースは考えられません。

うん、それはより多くのコードです。セラヴィ。

于 2013-07-09T19:23:22.170 に答える