簡體   English   中英

如何將輸入值傳遞給Meteor中的輔助函數?

[英]How Do I Pass Input Values to Helper Functions in Meteor?

我正在建立一個從eBay清單中提取數據的訂單。 它有一個部分,您可以在其中添加訂單項,並使用按鈕添加其他項。 它添加了模板的另一個實例(通過lineItems幫助器進行了迭代),效果很好。

因此,在該模板中,我需要它使用eBay api進行搜索(我已經設置了一個Meteor方法來執行此操作,但我不希望它包含敏感信息,因此不希望包含在內)。 您在輸入中輸入eBay列表的ID,它會自動填寫訂單項的信息,例如列表的標題。

那么,如何通過getEbayItemTitle助手傳遞參數(我想從輸入值中獲取的列表ID)?

這是我的輔助函數:

 getEbayItemTitle: function (id) {

    Meteor.call('getEbayItemData', id, function(error, result) {
       Session.set('ebayFetch', JSON.parse(result.content));
    });
    var item = Session.get('ebayFetch');

    return item.Item.Title;
 }

在我的模板中:(我將LISTING ID放在了我擁有實際列表ID的位置)

 {{#each LineItems}}
    <!--some HTML -->
    <input type="text" class="order-ebay-id" placeholder="Ebay Id">
    <!--some HTML -->
    {{getEbayItemTitle 'LISTING ID'}}
    <!-- some HTML -->
 {{/each}}

我以前通過完全不同的編碼方式實現了這一點...我將每個訂單項都附加了jQuery作為div。 但是問題是,您需要兩次輸入ebay列表ID,才能最終顯示標題。 因此,我認為我需要使用模板和輔助函數,以便數據具有響應性。

我真的希望這是有道理的。

做一個本身在助手中調用外部API的Meteor.call()可能很昂貴。 console.log()放入您的助手中,以查看其運行頻率! 但是回到您的問題,如果您事先知道listingID,那么將ListingId作為參數傳遞給您的助手的方法是正確的。 但是,由於它是用戶輸入,因此您需要從助手中的DOM中提取它。

 getEbayItemTitle: function(){
   var title = "";
   var listingId = $('.order-ebay-id').val();  // get value from input field
   if ( listingId.length() > 0 ){
     console.log('Meteor.call with listingId '+listingId);
     Meteor.call('getEbayItemData', listingId, function(error, result) {
       Session.set('ebayFetch', JSON.parse(result.content));
     });
     title = Session.get('ebayFetch').Item.Title;
   }
 return title;
 }

比幫助者更好的方法是將事件綁定到輸入字段。

Template.myTemplate.events({
  'blur .order-ebay-id': function(ev){
    var listingId = $('.order-ebay-id').val();  // get value from input field
    if ( listingId.length() > 0 ){
      Meteor.call('getEbayItemData', listingId, function(error, result) {
        Session.set('ebayFetch', JSON.parse(result.content));
      });
    }
  }
})

然后讓助手返回會話變量:

 getEbayItemTitle: function(){
   var title = "";
   if ( Session.get('ebayFetch') ) title = Session.get('ebayFetch').Item.Title;
   }
 return title;
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM