0

Angular を使用しているときに、そよ風からメタデータを取得する代替手段があるかどうかに興味があります。$q と Q の promise は互いにうまく機能しないため、$q ではなく Q.js の promise のみを使用することにしました。コントローラーで、metaDataStore が空かどうかを確認しています。

  if (mainDataService.manager.metadataStore.isEmpty())
            {
                $log.info('metadataStore is empty') ;

                mainDataService.getMetaData()
                  .then(function ()
                  {
                     EnableCreateButton();
                  });
            }

メタデータがない場合の基本的な考え方は、メタデータを取得してから、新しいレコードを作成できるボタンを有効にすることです。

これを達成するために、データ サービスで Q Promise を定義し、そよ風が Promise を解決した後で、Promise を解決します。

  function getMetaData()
{

    var myMetaDataPromise = Q.defer();

    Q.delay(0).then(function () {

        manager.metadataStore.fetchMetadata(serviceName).then(function () {
            myMetaDataPromise.resolve();
        });

    });
    return myMetaDataPromise.promise;



}

このクリーナーを作るための提案は素晴らしいでしょう。私が考えていた 1 つの考えは、コントローラーで promise を定義し、データ サービスが簡単な promise を返すようにすることでした。コントローラーが乱雑になり、懸念事項が分離されないと思っただけです。

4

1 に答える 1

1

to$qgithub の Breeze Labsの新しい拡張機能を見てみましょう。これはかなり広範囲に使用されており、効果的です。

まだ文書化していませんが、コメントはそれを「インストール」して使用する方法を説明しています。

次に、次のmainDataService.getMetaData()ようになります。

manager.metadataStore.fetchMetadata(serviceName).to$q(); を返します。

その後、意図したとおりに実行します。

mainDataService.getMetaData()
    .then(function() { EnableCreateButton(); });

あなたは今、 の国にい$qます。Angular は$applyEnableCreateButton を自動的に実行します。

于 2013-08-13T06:51:53.633 に答える