2013-04-11 111 views
17

這是backbone.js的一個已知功能,即當您設置的數據未更改時,它不會觸發更改事件,也不會通過驗證。然而,我需要更改事件觸發,因爲我存儲來自存儲後端驗證結果的AJAX調用的JSON響應。如果用戶在保持提交表單的同時將相同字段留空,後端驗證將返回相同的JSON結果,並且當我將其保存到模型時,它將不會觸發更改事件。當值不變時觸發backbone.js更改

有幾件事情我已經在這裏我設置的數據到模型的AJAX成功回調中嘗試:

嘗試性解決方案#1

t.model.unset('fieldErrors',{silent: true}); 
t.model.set({fieldErrors: JSONResponse}); 

嘗試性解決方案#2

t.model.set({fieldErrors: null},{silent: true}); 
t.model.set({fieldErrors: JSONResponse}); 

在進行調用並且用戶具有相同的JSONResponse時,這些結果都不會導致更改事件再次觸發。

+0

如果你不害怕的樣板,看到ScottPuleo的答案。否則,您可以重寫'Model#set'方法來始終激發自定義事件(如果您感興趣,我會發佈一個答案)。 – Loamhoof 2013-04-11 22:29:31

回答

27

手動觸發更改事件:

t.model.trigger('change', t.model); 

t.model.trigger('change:fieldErrors', t.model, newFieldErrorsValue); 
+5

第二種情況(隨機選項)應該不會被使用。觸發器方法就是這裏所需要的。請記住傳遞必要的參數,因爲當你手動觸發時,主幹不會爲你做。 – 2014-09-02 22:31:39

+2

注意:「第二種情況」是指自從被移除的舊案例。 – Chris 2015-05-06 22:42:25

+0

@Scott Puleo這是一個古老的問題,但我想知道您是否可以解釋爲什麼我們需要將模型本身作爲第二個參數傳遞給'trigger'?當我不這樣做時,'Collection._ModelEvent' - 稍後調用 - 不會收到模型。在我看來,'model.trigger('change')'應該足以將模型轉發到後面的事件。你知道它爲什麼不是嗎? (對不起,如果我的問題不清楚...) – arnaudrg 2015-08-17 23:16:01

相關問題