2014-02-24 86 views
0

我想了解其中this.item從這個骨幹查看未來:this.item中的骨幹查看

Backbone.View.extend({ 

    initialize: function() { 
     var date = new Date(); 
     this.date = date; 
     this.month = date.getMonth(); 
     this.day = date.getDay(); 
     this.year = date.getFullYear(); 
     this.calendar = new calendar(); 
     _.bindAll(this); 
    }, 

    showActivityItem: function(e) { 
     var target = $(e.currentTarget); 
     var id = target.attr("data-id"); 
     var item = this.item; 
    } 
}); 

item似乎是骨幹示範,我確定與除它是如何分配到item屬性的。

當我輸出在控制檯的項目,我得到:

child {cid: "c85", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…} 
_changing: false 
_events: Object 
_pending: false 
_previousAttributes: Object 
attributes: Object 
changed: Object 
cid: "c85" 
collection: child 
__proto__: Surrogate 

showActivityItem被每個事件稱爲:

events: { 
     'click #activityList .boxEntry': 'showActivityItem' 
    }, 

有在做這樣的類沒有代碼。 Backbone視圖中Backbone模型的item是一些未公開的訪問器嗎?它不在Backbone網站上的View屬性列表中。

謝謝。

+0

是那個工作代碼?沒有像item屬性那樣的東西,所以模型必須在初始化時分配。 – Puigcerber

+0

這只是代碼的縮寫版本。我已經添加了初始化方法。正如你所看到的,它並沒有被分配到那裏,因此我對它被分配的方式感到困惑。視圖中的任何位置都沒有分配。我想它有可能被分配到視圖之外。 –

+1

你可以做'console.log(item)'?因爲它應該是未定義的... – Puigcerber

回答

0

您的代碼之外的某處顯示代碼(可能是無意中)將.item屬性添加到視圖。

var model = new ItemModel(...); 

// ... 

var view = new ItemView({model: model}); 

// ... 

view.item = model; 

這當然是真的,沒有什麼在骨幹本身定義了一個名爲item屬性,你可以用一個搜索source code的驗證。既然你使用標準的Backbone事件委託(除非你有一些代碼沒有包括在內),那麼事件處理器中的this將被設置爲視圖本身。