2017-05-05 19 views
1

我試圖實現一個動態幫助字段,當焦點隨着流星自動套用格式更改時發生更改(類似於您提問時出現在右側的「類似問題」框這裏)。但是當字段變得焦點時,我得到「ReferenceError:myFunc沒有定義」。帶onfocus的流星afQuickField找不到函數

我已經嘗試在我的.js文件中定義myFunc作爲非包裝函數和模板助手,並在.html文件中作爲<script>包裝函數,甚至作爲onfocus的一部分內嵌函數(這真的很難看,因爲它無法找到.js文件中的標題和文本數組),但仍然得到ReferenceError。與onclick相同的問題。我也嘗試了一個模板焦點或點擊事件(這個從不會觸發)

下面的示例代碼。爲了清楚起見,我忽略了所有的<div>s,但表單在實際代碼中正確顯示,它只是onfocus屬性不起作用。

的.html

<template name="updateProfileForm"> 
    {{#autoForm id="updateProfileForm" collection="Meteor.users" doc=currentUser type="update"}} 
    {{> afQuickField 
     name="emails.1.address" 
     id="secondaryEmail" 
     label='Secondary Email' 
     onfocus='ProfileUpdateHelp("secondary")'}} 
</template> 

的.js

Template.updateProfileForm.helpers ({ 
     ProfileUpdateHelp: function(fieldName) { 
     // console.log("This:", this); 
     // console.log("instance():", instance()); 
     TemplateVar.set('helpTitle', profileUpdateHelpTitles[fieldName]); 
     TemplateVar.set('helpText', profileUpdateHelpTexts[fieldName]); 
     }, 
    }); 

profileUpdateHelpTitles = { 
    primary: "Primary email address", 
    secondary: "Secondary email address", 
}; 
profileUpdateHelpTexts = { 
    primary: "Primary email address help", 
    secondary: "Secondary email address help", 
}; 

我也試圖與事件和他們沒有火(我希望所有的3至火):

Template.updateProfileForm.events({ 
    "click #secondaryEmail": function(e) { 
     alert("Click"); 
    }, 
    "focus #secondaryEmail": function(e) { 
     alert("focus"); 
    }, 
    "blur #secondaryEmail": function(e) { 
     alert("blur"); 
    }, 
}); 
+0

請嘗試事件而不是幫手。 –

+0

Template.updateProfileForm.events({blur} #secondaryEmail':function(events){/ *做任何你想做的事情* /} }) –

+0

事件永遠不會觸發。請參閱上面的編輯帖子。 –

回答

1

成功!!!

所以這個問題比沒有開火的事件大得多。 .js文件中的事件或幫助程序都未被執行。問題結果是我試圖添加對prerender.io的支持。 prerenderio對象沒有被定義,所以對它的引用是拋出錯誤。爲什麼這會導致模板助手和事件不能在另一個文件中工作,我猜測它與加載順序有關。但刪除對未定義對象的引用導致我的幫助者和事件開始工作!


編輯:

所以事實證明,除去不確定的對象不是我做出的唯一改變,其實不是修補程序。我還宣佈

import { Template } from 'Meteor/Meteor' 

這顯然不是從哪裏進口。這導致Template成爲「其他」,導致任何以Template開頭的內容。 (幫手,事件等)變得不存在。正確的進口當然

import { Template } from 'meteor/templating'; 

如果有人明白爲什麼壞進口表現是這樣的(沒有編譯或運行時錯誤)的方式,請讓他們在評論開導其餘技術細節我們。謝謝。

編輯完


對於任何人誰來到這裏尋找如何讓聚焦狀態在這裏工作是代碼。這將觸發所有輸入字段以及表單中包含的按鈕。如果您只需要一個輸入字段,則使用#fieldId而不是#formId。

Template.updateProfileForm.events({ 
    "focus #updateProfileForm": function(e) { 
    const fieldId = e.target.id; 
    }, 
}); 
+0

@halfer,你爲什麼把標題中的「已解決」?我發現使這一切工作的根本問題。 –