主干中的智能渲染子视图
Smart rendering subviews in Backbone
tl;dr:从一页移动到另一页时,只更改/销毁这些需要的块(而不是重新呈现整个页面)。并使应用程序路由器尽可能简单。
我是主干网的新手,我看到的所有入门示例都是关于小应用程序的,其中只有一个页面有时会发生一些变化(添加/删除一些元素,但从未完全重新渲染)。但当我开始做我的应用程序时,它有点复杂,我面临着子视图组织的问题。。。
问题:当应用程序的每个页面都由负责在页面中显示其块的子视图(每个子视图可以有另一个子视图,即嵌套的子视图)组成时,合理的愿望是不要重新呈现在页面中导航时未更改的块。有时你需要重新渲染整个页面,当它与以前完全不同时,有时只是页面上的一些块。但在这种情况下,应用程序路由器变成了包含太多逻辑的怪物对象,因此很难维护。
我想要什么:我希望我的路由器像一样
define(['jquery', 'backbone'], function ($, Backbone) {
return Backbone.Router.extend({
routes: {
"": "home",
..........
},
home: function () {
require(['views/home'], function (View) {
var view = new View({ el: $("body") });
view.render();
});
},
..........
});
});
因此,我的目标是将渲染子视图的逻辑移动到视图。所以这个视图将决定要做什么:使自己包含子视图,或者只要求子视图自己决定相同的问题。
可能的解决方案:仔细想想,我想到了全局对象的想法,它包含作为应用程序状态的视图树(例如first_design(home(about,login)))。当我们移动到下一页时,它有相同的主视图(即first_design),我们不渲染first_design视图,而是它的子视图(在这种情况下,只有home。)。对于路由器中的每个页面,我们现在都需要手动定义这个视图树。例如:
define(['jquery', 'backbone'], function ($, Backbone) {
return Backbone.Router.extend({
routes: {
"": "home",
"contacts": "contacts",
..........
},
home: function () {
require(['views/firstDesign', 'views/home', 'views/about', 'views/login'], function (FirstDesign, Home, About, Login) {
new FirstDesign({ el: $("body"), subviews: { new Home({ subviews: { new About(), new Login() } }) } });
});
},
contacts: function () {
require(['views/firstDesign', 'views/contacts'], function (FirstDesign, Contacts) {
new FirstDesign({ el: $("body"), subviews: { new Contacts() } });
});
},
..........
});
});
所以,问题是…:我相信我现在正在重新发明轮子,显然我的轮子不够好(甚至可能不圆:D)。那么,我需要什么,有什么实现吗?或者如果没有,那么我应该如何正确地做呢?谢谢
附言:我使用backbone.js和require.js。很抱歉我的英语不是我的母语。。。
有一个名为LayoutManager的主干插件。从他们的维基页面:
LayoutManager为组装布局和Backbone中的视图。
我用它,它对我很有用。
https://github.com/tbranyen/backbone.layoutmanager/wiki
我意识到我的解决方案不那么灵活。毕竟我决定用马里内特。真正帮助我解决问题的是这个问题。p.s:Marionette现在在Region类中有一个hasView方法。
- 如何使用javascript从主svg对象动态创建svg视图框
- 正在使用$location.path(.)路由ng视图
- angular.js没有'无法在PhoneGap中处理视图标记
- 如何包含特定于每个视图angularjs的javascript文件
- 通过在Dojo mobile ViewController.openExternalView中动态更改打开同一外部视图的
- Kendo:我该如何在树视图中创建一个递归的hieiarchy
- Ajax Live搜索发布到Laravel视图
- backbone.js无法渲染视图
- 根据某些条件在视图之间切换
- ng视图外的链接重定向到ng视图内的页面
- 如何在Jquery中发布后将值从视图返回到控制器
- 三星智能电视应用程序;Brightcove示例应用程序远程控制问题
- 将日期时间作为 JSON 发送将无法在我的视图中正确显示
- 使用Scala Play Framework视图中的键检索映射值
- FF视图源|脚本高亮显示为红色
- 如何使bxslider仅在移动视图中处于活动状态
- 为什么不't我的变量在我的控制器中填充后在我的视图中呈现
- 主干中的智能渲染子视图
- 三星智能电视页面滚动出视图,以响应上下键的按下
- 使用智能表在视图状态 AngularJs 之间持久化数据