2016-08-03 78 views
2

我正在使用RiotJS編寫一個表應用程序,並且我一直在遇到與onclick事件相同的問題。幾乎每一次我嘗試使用RiotJS onclick負載觸發

<tag onclick={somefunction}>

我變得非常不穩定的行爲。有時它會在頁面加載或更新時調用函數,然後根本不響應點擊,有時會在啓動時多次觸發。我似乎無法找出問題背後的模式,但我注意到它在線路功能調用中往往是個問題,例如,

<tag onclick={console.log("foo")}>

參照傳遞 <tag onclick={function}>儘管它與兩個發生

和常常少。有沒有人經歷過這樣的事情?請評論,如果你需要更多的上下文。

+2

嘗試'的onclick = {somefunc.bind( '嗒嗒')}'https://github.com/riot/riot/issues/1001 –

+1

不能使用'{執行console.log( 「富」)} '因爲它執行/評估,因爲它解析,然後根本不'onclick'。正如@Daniel_L所說,如果你想傳遞參數,你可以使用'.bind'或設置'data-'或類似的參數,如http://github.com/riot/riot/issues/1001 – user1278519

+0

中提到的如果你不喜歡't like:''然後使用閉包:'somefunction(){/ private vars * /返回函數(){* vars */ /*預執行您的點擊邏輯*/ }}'所以您的模板看起來像'' – Simon

回答

0

在防暴{}表達式在掛載/更新時間進行評估。

這意味着如果{}裏面的內容是一個函數調用,它會在掛載標籤更新時執行,每次它所在的部分都被評估。

這與香草javascript不同,在點擊事物之前,甚至不會解析onclick。

這可能會導致一些混淆,因爲暴亂並不總是以您認爲的方式解析{}表達式。這與化合物式(那些具有布爾邏輯||&&等)

在這種情況下,在onclick防暴正在尋找的表達/功能特別麻煩...和它會嘗試在條款來評價它標籤本身......換句話說,這樣的:

<button onclick={foobar}>Click me!</button>

暴動會嘗試執行this.foobar()點擊時。

通常,我嘗試通過在標記的<script>部分設置我的方法來利用此方法。這對於我的{}表達式的誤解留下了很小的空間,並且在腳本部分中將邏輯的位移出標記的HTML部分並且移動到我期望的行爲的位置。

+0

'

    job.Name
' 例如。 – imclean