[英]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.