私のモデルの2つの属性は、一度変更されると互いに更新されるはずです。 startDate
およびendDate
。それらの値はmoment.jsライブラリのMomentオブジェクトです。Backbone.jsの循環参照でスタックオーバーフローを回避するにはどうすればよいですか?
同じ日付の2つのモーメントオブジェクトは同等ではないため、バックボーンが常に変更されているように見えるため、最大スタックを超えるループが発生します。
new moment('01/01/12') == new moment('01/01/12') // => false
{ silent: true }
オプションが助けていないようです、それはonly defers the change eventいうよりは、それをalltogether抑制するので、私はよく分からないが、私は、と思います。
ここで溢れたコードです:
class Paydirt.Models.BlockBrowser extends Backbone.Model
initialize: =>
@on('change:startDate', @updateEndDate)
@on('change:endDate', @updateStartDate)
updateStartDate: =>
@set({ startDate: @cloneEndDate().subtract('days', @get('interval')) }, { silent: true }
updateEndDate: =>
@set({ endDate: @cloneStartDate().add('days', @get('interval')) }, { silent: true })
cloneStartDate: => new moment(@get('startDate'))
cloneEndDate: => new moment(@get('endDate'))
を、私は、この変形例のように、コールバックループを防ぐために、グローバルフラグを設定することができます。
updateStartDate: =>
if [email protected]
@changing = true
@set({ startDate: @cloneEndDate().subtract('days', @get('interval')) }, { silent: true })
@changing = false
updateEndDate: =>
if [email protected]
@changing = true
@set({ endDate: @cloneStartDate().add('days', @get('interval')) }, { silent: true })
@changing = false
...しかし、これはあるが、明らかにハックティーの解決策です。このユースケースで私が従うべきより良いパターンがありますか?
ありがとうございます。
瞬間の整数値を比較することができ、I 。ありがとうございました。 – doctororange
Backbone v0.9.2 _silentビヘイビア_が問題を解決していますか? – fguillen
v0.9.2はループ動作を防止します。それが起こるにつれ、我々は完全な実装でいくつかカスタムイベントを実装しました(OPのコードは実証的なものです)ので、あなたのアドバイスは素晴らしいものでした。 – doctororange