8

restangular でネストされたリソースを処理する際のベスト プラクティスは何ですか? すなわち

Restangular.one("accounts", 1).one("projects", 1).get().then(function (project) {
project.getList("proofs").then(function(proofs){
    project.proofs = proofs;
    _.each(proofs, function(proof){
        proof.comments = proof.getList("comments");
    });
});
$scope.project = project;

});

これにより、ビュー内のそれぞれにうまくアクセスできます。

<li ng-repeat="proof in project.proofs">Total: {{proof.comments.length}}</li>

その後、プロジェクトを更新したい場合は、すべてをプロジェクトの REST エンドポイントに送信します (すべてのプルーフとすべてのproofs.comments を含む)。

project.name = 'New Name!';
project.put();

これは、私が何か間違ったことを実装しているに違いないと思います。それを処理するより良い方法があるのでしょうか?

このようなもの (テストされていません) を使用して、すべてを個々の $scope に直接定義することはできませんか? すなわち

Restangular.one("accounts", 1).one("projects", 1).get().then(function (project) {
project.getList("proofs").then(function(proofs){
    $scope.projectProofs = proofs;
    _.each(proofs, function(proof){  
      $scope.proofComments[proof.id].push(proof.getList("comments"));
    });
});
$scope.project = project;

});

これに対して推奨されるベストプラクティスは何ですか?

4

2 に答える 2

1

カスタム PUT メソッドを作成するか、オブジェクトからプロパティを削除するかの 2 つのオプションがあります。

オプション #1: カスタム PUT メソッドを作成する

要素を配置するためのデフォルトの方法は、設定されているすべてのパラメーターを送信します。

これは、Restangular ソース コードで確認できます。ここでは、すべてのリソースが、すべてのパラメーターを受け入れ、パラメーターを削除するためのフィルター処理を行わない既定のメソッド セットで初期化されます。

オブジェクトから「プルーフ」プロパティを削除するカスタム メソッドを作成するか、リクエストで PUT する特定のフィールドのみを選択することができます。

オプション #2: オブジェクトからプロパティを削除します。

プロジェクトの前にput()、次のようなことができます。

/* ... code to get the project object and the nested proof objects ... */

project.name = 'New Name!';

delete project.proofs;
project.put();

delete キーワードは、オブジェクトからプロパティを削除します。その後、プロジェクト オブジェクトを呼び出すとput()、ネストされたリソースがなくなります。delete キーワードの詳細については、こちらを参照してください。

コンソールでオブジェクトを印刷して、サーバーに何を入れているかを正確に確認できます。

console.log(project);
于 2014-07-31T02:05:03.393 に答える