什么是Backbone.js或其他MVC提供
What does Backbone.js or other MVC offer?
我从backbone.js开始
浏览一些教程,如下所示。我有一种感觉,它更多的是关于如何组织你的对象,以及如何指导它们相互作用。不用backbone。js我也能做所以对我来说,backbone.js看起来更像是一套规则和哲学,而不是一个真正的插件。是这样吗?
(function($){
var Item = Backbone.Model.extend({
defaults: {
part1: 'hello',
part2: 'world'
}
});
var List = Backbone.Collection.extend({
model: Item
});
var ListView = Backbone.View.extend({
el: $('body'),
events: {
'click button#add': 'addItem'
},
initialize: function(){
_.bindAll(this, 'render', 'addItem', 'appendItem'); // remember: every function that uses 'this' as the current object should be in here
this.collection = new List();
this.collection.bind('add', this.appendItem); // collection event binder
this.counter = 0;
this.render();
},
render: function(){
$(this.el).append("<button id='add'>Add list item</button>");
$(this.el).append("<ul></ul>");
_(this.collection.models).each(function(item){ // in case collection is not empty
appendItem(item);
}, this);
},
// `addItem()` now deals solely with models/collections. View updates are delegated to the `add` event listener `appendItem()` below.
addItem: function(){
this.counter++;
var item = new Item();
item.set({
part2: item.get('part2') + this.counter // modify item defaults
});
this.collection.add(item); // add item to collection; view is updated via event 'add'
},
// `appendItem()` is triggered by the collection event `add`, and handles the visual update.
appendItem: function(item){
$('ul', this.el).append("<li>"+item.get('part1')+" "+item.get('part2')+"</li>");
}
});
var listView = new ListView();
})(jQuery);
Backbone.js、underscore.js和jQuery(它们都是相互依赖的)是javascript之上的实用抽象层和工具集,允许您组织业务逻辑、模板和模型。
这样做的主要好处是代码的可读性(对于长期项目/有多个成员的项目),围绕离散部分的组织(例如,使HTML脱离业务逻辑)的一般良好实践,为项目中困难/有趣的部分提供时间,而不是在不同的浏览器兼容性问题上重新发明轮子,并且(在下划线的情况下)一个伟大的工具集来帮助你管理javascript对象,数组,函数等,用于安全合理的编程。
基本上,如果你选择不使用这些工具,你要么就是在做原型,要么就是有大把的时间。如果时间和理智是你喜欢的东西,不要害怕使用它们!
Backbone提供了更清晰的关注点分离,使您可以编写更清晰的代码。我使用jQuery编写了一个非常精细的富客户端。我必须直接在DOM元素上存储大量元数据。这意味着我还必须定期查询DOM元素以读取/使用该元数据。虽然你可以用现有的工具做任何事情,但有些工具会让事情变得更容易(也更干净)。
使用Backbone,您的模型存储所有相关信息。您不需要在DOM属性中存储那么多东西。每个模型只存在一次,所以对于任何一个事实(例如,给定人物模型的first_name),您都有一个单点事实,即模型本身。您使用模型来跟踪它自己的事实,而不是DOM。我保证你的代码会更干净。
Backbone不是万能的工具。当你在浏览器中表示模型(存在于后端数据库中的东西)时,使用它是有意义的。
你说对了,这主要是关于如何构建大型js应用程序的哲学,所有的管道都为你处理。
Backbone仍处于起步阶段,但它有很大的吸引力。即使你现在不太满意,我也会留意的。
我想说,Backbone.js提供的主要功能实际上是事件模型。是的,可以手工编写,因为它确实是一个简单的模型。
对于Spine.js,一个非常相似的库,我想说它提供的另一个特性是Class,一个javascript原型的包装器。
也就是说,我认为有一些重要的注意事项是您需要正确处理的。这些告诫除其他外:
- 你的事件到底是什么时候触发的?
- 是否像自动检测到Backbone.js的情况?
- 或者你想要像在Spine.js中那样通过调用save() 来显式地做到这一点
- 如果有两个函数被触发响应一个事件,他们接收一个模型实例:
- 它们是否接收到相同的实例-即其中一个所做的更改将立即对另一个可见
- 或者他们收到了某种副本。如果副本:
- 它们会对模型的未来变化做出反应吗,
有很多事情要做对。我肯定有偏见,因为我发现Backbone.js所做的选择非常麻烦。我显然更喜欢Spine.js。但是,我鼓励您为这两个库寻找一些重要的用例示例,并自己做出判断。
继续自己实现所有这些可能是正确的选择- Spine.js核心只有2KB的简化代码。然而,我强烈建议你试着从别人的错误中学习。在我看来,有很多地方是错误的。
- 如何添加浮动和非浮动,其他
- 与其他库的jQuery.noConflict()
- 播放当前视频时如何停止其他视频?JavaScript
- 剑道UI内联编辑:如何在点击其他按钮时隐藏按钮
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- 制作一个不带HTML a标记但在动画播放完毕后指向其他页面的超链接
- 将Javascript数组发送到控制器ASP.NET MVC
- 如何使用Spring MVC将Facebook返回的响应数据保存在Java类中
- 如果React.js是V,那么在MVC中,其他字母是什么
- 如果其他条件出现在MVC的下拉列表中
- Window.Location.Href或重定向_self的其他方法不起作用(MVC视图)
- Web API不能从asp.net MVC 4的其他服务器调用
- 什么是Backbone.js或其他MVC提供
- 解析json到java对象与其他对象属性在spring-mvc
- Jquery$.ajax()调用将具有其他参数的关联数组传递给MVC控制器失败
- 我发现自己在使用Backbone.js或其他MVC时重复了很多代码
- MVC如何从html触发其他服务器上的操作
- ASP.NET MVC 返回文件结果,其中包含要在客户端处理的其他数据
- 从MVC应用中的其他站点获取iframe的src内容
- Asp.net MVC加载第一个条目,而其他的则晚些加载