0

iOS アプリを補完する Web サイトに取り組んでおり、JavaScript の知識が不足していることがわかったので、いくつかのガイダンスを使用できます。

私の CloudKit データベースには、イベントと組織の少なくとも 2 つの recordTypes があり、それぞれに複数のフィールドがあります。Organization の recordType には、特定の Events recordNames への参照が含まれています。各イベントが呼び出された後、そのレコード名を使用して組織のクエリをフィルタリングし、イベントを参照する組織の関連する名前、ロゴなどのフィールドを取得できるように、順次クエリをコーディングしようとしています。

このアプローチは、iOS コード (XCode 7、Swift 2) で機能します。knockoutjs コードで各 recordType を正常に呼び出すことができるので、db へのアクセスに問題がないことがわかります。

以下のコードは現在、最初の関数 (fetchRecords) が 2 番目の関数 (fetchRecords2) を呼び出してから、2 つのレコード セットをマージするように設定されています。これはひどい構造だと確信していますが、さまざまなアプローチを試しましたが、今は少し迷っています。

     self.fetchRecords = function() {
        var query = { recordType: 'Events' };

        return publicDB.performQuery(query).then(function (response) {
            if(response.hasErrors) {
                console.error(response.errors[0]);
                return;
            }

            var records = response.records;
            var numberOfRecords = records.length;
            if (numberOfRecords === 0) {
                console.error('No matching items');
                return;
            }

            self.events(records);

            self.fetchRecords2();

        if (self.organization() != "") {
            self.events.push(self.organization);
            self.organization("");
            }

        });         
    };

    self.fetchRecords2 = function() {       
        var query2 = { recordType: 'Organization', filterBy: [{
                fieldName: 'events',
                comparator: 'EQUALS',
                fieldValue: {value: self.events.recordName}
            }] };

         return publicDB.performQuery(query2).then(function (response2) {
            if(response2.hasErrors) {
                console.error(response2.errors[0]);
                return;
            }

            var records2 = response2.records;
            var numberOfRecords2 = records2.length;
            if (numberOfRecords2 === 0) {
                console.error('No matching items');
                return;
            }

            self.organization(records2);


            });

        };

HTML 呼び出しは次のとおりです。

<div data-bind="foreach: events">
  <div class="display">
    <h3><span data-bind="text: recordName"></span></h3> 
    <h3><span data-bind="text: fields.event_title.value"></span></h3>
    <h3><span data-bind="text: fields.date_of_event.value"></span></h3>
    <h3><span data-bind="text: fields.event_ratings.value"></span></h3> 
    <h3><span data-bind="text: fields.organization_name.value"></span></h3>                         
  </div>
</div>

すべてのイベント フィールド (最初の 4 つ) が表示されていますが、organization_name (Organization recordType から取得) が原因でエラーが表示されます。

任意の支援や提案をいただければ幸いです。

4

1 に答える 1