2012-02-24 52 views
0

我正在開發一個BackboneJS應用程序。我正在處理的一個案例中,似乎不想融入MVC設置(或者,更可能是我對MVC的理解不包括在何處)。視圖如何瞭解其模型?

我有代表圖片的模型的集合。比方說,這個例子中有100個。我有一個控制器,告訴視圖加載選擇這些模型,因爲它逐頁顯示圖片..所以頁面1顯示前十個,等等。

這裏的問題是否或者不是控制器應該告訴視圖「以下是您的模型」,或視圖是否應該知道「我從__獲得我的模型,並且我需要選擇它們的子集」。 「和」是令我擔心的。控制器知道「用戶請求了第一頁模型」,因此,將該視圖告訴「這是用戶請求的模型選擇」似乎更自然。

這是正確的方法嗎?

+0

您正在描述集合中的記錄或元組,而不是模型。一個「模型」可以包含一系列圖片。 – 2012-02-24 20:13:00

+0

啊,我明白了......所以也許我一直在看模型的方式是錯誤的。 – Stephen 2012-02-24 21:09:59

+0

模型是數據從一個地方傳遞到另一個地方的容器。 – 2012-02-24 21:11:09

回答

2

我同意羅伯特的看法,因爲你看起來有點不對。每個視圖只能有一個模型,因此您的模型應包含要在該視圖中顯示的所有圖片。例如,你的模型可以:

public class Gallery 
{ 
    public List<string> ImageUrls { get; set; } 
} 

現在,控制器會通過一個庫對象您查看其型號,並查看他們將擁有所有圖片網址裏面的模型對象。但Model對象只能包含所有圖像(以及該視圖的所有其他信息)的一個對象。

您希望您的控制器成爲決定要顯示哪些圖像並將其發送到視圖的人員。通常,經驗法則是模型只是數據結構,視圖只是數據顯示,控制器是大腦,所有計算都應該完成。這不一定是普遍的,特別是當你開始處理外部服務時。但我們不要離題。

我希望這會有所幫助,並且您對MVC網站的組織方式有了更好的瞭解。如果您還有其他問題,請告訴我! :)

0

整理您的骨幹機型可能需要的樣子......

var Image = Backbone.Model.extend({ 
    url: 'place/where/images/are' 
}); 

var Images = Backbone.Collection.extend({ 
    model: Image 
}); 

var ImageView = Backbone.View.extend({ 
    initialize: function(){ 
     this.collection.bind('add', this.render, this); 
     this.collection.fetch({ 
      data: { 
       // Send whatever you need to the server 
      } 
     }); 
    }, 
    render: function(model){ 
     // do something with the added model 
    } 
}); 

var myImageView = new ImageView(); 

這樣您的收藏知道從哪裏得到的數據和觀點進行呼叫到服務器。

相關問題