2016-07-11 22 views
1

所以我有一個流星助手方法的角控制器,如下所示。如何處理依賴助手結果的值?

function localeCtrl($scope, $reactive, $stateParams{ 
    $reactive(this).attach($scope); 
    var self = this; 
    self.helpers({ 
     locale: function(){ return Locales.findOne($stateParams.id)}, 
     staff: function(){ 
      // Load data from second collection based on current Locale. 
      // But how? 
     }, 
     address: function(){ 
      // Take self.location.address and massage it to provide 
      // google maps link. How? 
     } 
     tags: function(){ 
      // Collect all unique instances of a given tag by 
      // iterating over the available locales. 
      // E. G. If 10 locales have the 'restaurant' tag, and 5 
      // more have the 'library' tag, I want an array of 
      // ['restaurant', 'library'] -- easy enough to do 
      // by iterating over the locales, but how do I do that 
      // reactively? 
     } 
    }); 
} 

不幸的是,我需要設置基於()由語言環境取出的數據附加屬性。我在初始化控制器時無法設置它們,因爲locale()中的值隨着從服務器獲取數據而發生更改。但我需要訪問區域設置中的數據,例如創建谷歌地圖地址或獲取相關記錄。 (由於當時我確定有意義的原因,它們並未嵌入到本地文檔中)。

編輯:

此外,我使用的地面數據庫來存儲數據的脫機訪問的本地副本,這使得生活變得更加複雜。

回答

1

也許你最好打賭是使用發佈你的收藏,這是使用reywood:publish-composite包實現的。

添加軟件包:

meteor add reywood:publish-composite 

現在,你發佈的區域設置集合,你會做這樣的事情:

Meteor.publishComposite('locales', function() { 
return { 
    find() { 
     //Put whatever you need in the query for locales 
     const query = { 
     _userId: this.userId 
     }; 


     return Locales.find(query); 
    }, 

    children: [{ 
     find(locale) { 
     return Staff.find({ localeId: locale._id }); 
     } 
    }] 
    }; 
}); 

然後在你的控制器助手之前,你補充一點:

this.subscribe('locales'); 

現在你應該可以簡單地調用這樣的代碼:

this.helpers({ 
     locale(){ 
      return Locales.findOne(this.$stateParams.id); 
     } 
    }); 

並獲得它在這樣的模板:

locale.staff 

給一個嘗試,讓我知道!

+0

不幸的是,一些關鍵邏輯是倒退的。 (不要責怪我,我在研發中晚了)。員工ID存儲在區域設置中。 (編輯:其實,我認爲我現在看到如何調整這一點,在第二次閱讀)另一個問題是,我使用地面數據庫離線模式,我不知道這與你的建議合作。一旦我解決了其他一些問題,我們將看到它是如何工作的。 – RonLugge

+0

此外,我添加了一個額外的用例問題,我__建議涵蓋了您的建議。應該像「兒童」方法一樣簡單,只要邏輯覆蓋變革,我認爲......對嗎? – RonLugge

+0

我想你應該可以添加另一個兒童收藏品,並且只需像工作人員那樣引用它即可。我會看看我引用的鏈接的文檔是肯定的。這聽起來像你在正確的道路上。 :) – Erick