我想清楚一下在骨干网中使用模型和视图的正确方法。应该首先使用什么,如果可能的话。
例如:如果我有一个应用程序在页面上显示一系列不同的图像,一旦点击它就会移动页面,只显示带有名称,描述,颜色等的图像。
什么是更好的使用方法;
单击图像并更改触发路由器的URL,显示正确的视图。从该视图加载模型。
将click事件附加到每个图像,这会更改模型中的详细信息,然后触发事件以更改视图。
再次使用路由器,调用模型然后触发视图。但是,我仍然可以使用该模型获取详细信息。
在路由器中调用它们并将模型传递给视图?又如何做到这一点?
另一种方法
我正在使用骨干样板,我认为可能会让我感到困惑。但任何文章或解释都会非常有用。
答案 0 :(得分:2)
我经常设置的方式是我大量使用Backbone.Events;我倾向于通过将这些事件绑定到视图中的方法来拦截视图中的单击事件。反过来,该绑定事件将执行一些特定于视图的工作,然后执行类似this.trigger("Router_SomeEvent")
的操作 - 指定该事件的绑定,通常是在路由器中创建视图,如下所示:
// Begin router snippet...
someRouteMethod: function() {
this.views.SomeViewInstance = new MyViews.SomeViewClass();
this.views.SomeViewInstance.bind("Router_SomeEvent", this.onSomeEvent);
},
onSomeEvent: function() {
this.navigate("NewLocation", { trigger: true });
}
// End router snippet
使用这种发布/订阅(pub / sub)模式,您的代码变得更加分离,更易于处理和扩展。起初它有点令人困惑,但是一旦掌握了它,就会越来越清楚为什么它有用。我倾向于让我的路由器处理所有......好...路由,而我的视图只包含渲染逻辑,事件绑定到UI,并在必要时将事件冒泡到路由器。您还可以将事件绑定到模型;我倾向于使用类似于视图的模型,因为它们会通知我的路由器有一些变化,路由器将继续通过改变视图状态,改变其他模型或集合等来处理该事件。
Backbone非常强大,但需要相当长的一段时间才能学习。我推荐Addy Osmani的Backbone Fundamentals;他还有一本关于奥莱利的书,这本书真是太棒了。
答案 1 :(得分:0)
单击图像并更改触发该URL的URL router,显示正确的视图。从该视图加载 模型。
您不一定需要路由器。如果您计划将此URL用作永久链接,并且在用户转到此链接后打开图像详细信息视图,则只想使用它。
点击事件附加到每个图像,这会更改细节 在模型中,然后触发事件以更改视图。
为什么要在点击时更改模型?根据我的理解,你有3个视图:容纳图像拇指的容器,拇指图像视图和图像细节视图(例如在灯箱中打开一个更大的图像)。现在,在构造容器时,将图像作为参数传递给集合。容器为集合中的每个项目呈现拇指图像视图。请记住,现在每个拇指视图都有图像模型。现在单击调用图像详细信息视图并传递已有的模型作为参数。此时没有真正涉及模型更改,路由或事件。