Javascript Backbone.js与非RESTful应用程序?(Backbone.js适合我当前的项目吗?)

Javascript Backbone.js与非RESTful应用程序?(Backbone.js适合我当前的项目吗?),javascript,model-view-controller,javascript-framework,backbone.js,Javascript,Model View Controller,Javascript Framework,Backbone.js,我正试图找出Backbone.js是否是我当前项目的正确框架:一个可视化应用程序 我有几个问题: 1)状态/路由? 由于这不是典型的RESTful应用程序,而是一个具有各种图表类型和设置的可视化应用程序,因此如何在URL中维护状态? 假设我的areaChart模型有许多默认值,如下所示: AreaChartModel = Backbone.Model.extend({ defaults: { selectedCountries: [], year: 197

我正试图找出Backbone.js是否是我当前项目的正确框架:一个可视化应用程序

我有几个问题:

1)状态/路由?

由于这不是典型的RESTful应用程序,而是一个具有各种图表类型和设置的可视化应用程序,因此如何在URL中维护状态? 假设我的areaChart模型有许多默认值,如下所示:

AreaChartModel = Backbone.Model.extend({
    defaults: {
        selectedCountries: [],
        year: 1970,
        stacked: false
    },
    initialize: function(){
        [...]
    }
});
在对模型进行更新时,我想序列化其中一些属性,以便将特定状态标记为书签:chartApp.html#!年份=1970年,堆叠=假等

反之亦然,当使用此状态初始化应用程序时,如何“取消参数化”url状态并设置模型?我可以使用主干网的内部路由吗

2)控制器和联轴器?

主干似乎有一个非常紧密的视图模型耦合? 例如,我真的应该这样将areaChartView绑定到模型吗

AreaChartView = Backbone.View.extend({
    initialize: function(){
        areaChartModel.bind("change:year", this.render);
    }
});
这通常不是控制器的角色吗

3)继续:模型与控制器?

在这种情况下:

“侧栏”中的更改应触发一系列功能:
1) “应加载当前选择的新数据”
2) “基于此数据,应更新可视化视图中的比例”
3) “应呈现可视化视图”

我应该将这些函数放置在何处,以及如何在模型中创建状态稳定时触发的事件?(即,当所有函数都被调用并且是时候设置视图状态了吗?

1)我会尽可能多地使用Backbone.js本机路由,使用“:params”和“*splats”。您可以将所有查询放入Backbone.js路由中,但我个人会牺牲某些东西来支持直观的UI按钮

e、 我会有一个默认的线栏,你不能预设这个与URL,但改变为一个堆叠的图形将是一个简单的按钮点击

我可能会迷路,从使用?和&在我的URL中。稍后我可能会回到这一点,因为它很有趣

2) 您的示例很好,只需记住Backbone.js MVC术语与传统MVC不相关

主干视图本质上是传统MVC中的控制器。 主干控制器只是框架内的一种路由方式。 与Backbone.js一起使用的模板引擎是传统的MVC视图

3) 关于问题3,我仍在写

,我将为滑块创建一个
模型
和一个
视图

然后,我会将模型上
change
事件的触发与视图中更新图形视图的某个函数相关联(如更改比例)。比如:

var Slider = Backbone.Model.extend({})

var SliderView = Backbone.View.extend({
    initialize: function() {
        this.model.bind('change', this.render);
    }

    render: function() {
        // load data, change scales, etc.
    }
});

var slider = new Slider();
var slider_view = new SliderView({ model: slider });

也许一个好主意是把绑定放在父视图中,然后将其分配给子视图,协调它们的工作。

< P> >坐下来考虑一下,如果保持整个状态完全是个好主意吗?使用基于url的状态管理的主要动机是能够支持基于浏览器的导航按钮,并能够为页面添加书签。在可视化应用程序中,您的数据可能会随时发生变化。这不是您希望在应用程序url中保留的内容。当一个用户为你的应用程序添加书签并在三天后返回应用程序时——他看到了三天前的数据的可视化,你真的希望这样吗?对于您的场景,假设我没有误解您的需求,我建议将数据状态保留在模型本身中

关于视图与模型数据的同步,是的,您可以自己编写所有绑定逻辑。在这种情况下,视图类将负责在第一次渲染时设置绑定。在随后调用render时(可以调用render来响应模型中的任何更改事件),将刷新显示可视化的DOM/canvas


也许您应该期待一个用于数据同步的插件,它可以为您处理很多样板文件。列出了一些可用的数据绑定扩展。是我一直在研究的另一个解决方案,在这方面可能会有所帮助。

非常感谢您的投入。这真的很清楚:“主干视图本质上是传统MVC中的控制器。与Backbone.js一起使用的模板引擎是传统MVC视图。”现在,我正挣扎于#3——当模型更新时,将所有应按顺序调用的功能放置在何处。如今,大多数人认为控制器的主要功能是路由器,因为服务器端MVC包试图将MVC安装到不同的范例中。由于控制器总是重新呈现整个视图,因此服务器上不需要粘合事件和视图的任务。在传统的客户端MVC中,控制器负责响应事件并只更新需要它的视图。但是,路由确实适合页面的顶级控制器角色(因此它可以将状态保存为书签)