2012-02-24 55 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(); 

这样您的收藏知道从哪里得到的数据和观点进行呼叫到服务器。

相关问题