2012-11-02 107 views
0

我有一個backbone.js模型,其中包含一個日曆。用戶可以在日曆中來回訪問,並可以獲取所選日曆日的活動。backbone.js更改事件只觸發第一次

在我的模型,我有

 
initialize: function(){ 
    this.on('change:date',this.get_cal()); 
}, 
get_cal: function(){ 
    alert('get calendar'); 
    this.fetch(... 
} 

在我看來,我有

 
cal_date: function(move){ 
    Myapp.cal.attributes.date.setDate(Myapp.cal.attributes.date.getDate()+move); 

} 

當日期改變,我預計骨幹觸發更改事件,並得到日曆事件新的日期。不幸的是,這並沒有發生。

我也試圖把印刷日期到模型中

 
Myapp.cal.set({print_date: formatted_date}); 

想,也許骨幹缺少更新,因爲我不是叫「設置」,或者是因爲它看到一個Date對象,並認爲它已經有一個日期對象,因此沒有改變。

我也試圖觸發Myapp.cal.trigger('change')的變化,在視圖中,但也沒有工作。也不通過調用Myapp.cal.cal_events.refresh()刪除日曆事件,其中cal_events是持有天事件的集合。

你看到這裏有什麼問題嗎?

回答

3

我認爲這個問題是用括號後在此行get_call

this.on('change:date',this.get_cal()); 

,因爲他們叫get_call權初始化而不是使他們的事件處理程序,你應該刪除它們。

+0

這是正確的伊萬,你可以解釋任何機會,或指向我解釋調用'this.get_cal()'函數和'this.get_cal'之間不帶大括號之間的區別?我不明白爲什麼一個人工作,而另一個不是。 – pedalpete

+0

@pedalpete帶括號(this.get_call()),get_call將立即執行。如果沒有括號(this.get_call),那麼您傳遞的函數對象將在相應事件發生時稍後調用。 – Pramod

+0

JavaScript中的@pedalpete函數是一種類似字符串或整數的數據類型。如果沒有圓括號,函數本身就像一個參數一樣傳遞(這就是您通常在指定回調時要做的事情),並帶圓括號 - 它是返回值。 –