javascript - Backbone.js 及其 API 混淆

标签 javascript model-view-controller api rest backbone.js

我最近开始使用 Backbone.js。我喜欢这个架构,就功能而言,它几乎正是我所需要的...

...但是我发现了以下注意事项:

  • 对于 Collection 而言,get 的含义与对于 Model 的含义不同。没有设置。应以常规方式访问属性。我觉得这很不一致。有时很容易混淆模型和集合。有什么办法可以克服这个问题吗?
  • Model.extend 中分配初始值并不总是有效。例如,分配 url不会覆盖默认行为。这只能通过调用 set() 方法来实现。同样非常容易出错。
  • 我仍然不知道是否需要在 initialize() 调用中使用 get/set
  • 我不明白为什么我不能在 initialize() 中调用 _.bindAll(this) 并且我必须列出要绑定(bind)的特定函数名称像这样:_.bindAll(this, firstFunc, secondFunc, ...)。这不是很干。

我想知道:关于上述情况的最佳做法是什么?您如何使框架更加一致 - 任何猴子补丁?我做错了什么/违反惯例了吗?

如果有任何好的现实世界示例,我将不胜感激。我确实找到了这个:http://documentcloud.github.com/backbone/docs/todos.htmlhttp://liquidmedia.ca/blog/2011/01/backbone-js-part-1/而那些并没有解决任何提到的问题。事实上,他们只是提出了最简单的想法,绝对没有边界案例,所以任何更复杂的东西都可能有用。

编辑:

好吧,还有一个我不明白的基本想法:

  • 是否允许我像这样在扩展上放置额外的属性:var SomeModel = Backbone.Model.extend({ myattribute: myvalue })
    • 如果是这样,那么为什么对 new SomeModel().get("myattribute") 的后续调用不起作用?
  • initialize() 中的 this 究竟是什么?是模型类还是模型实例?

编辑(2):

好吧,我找到了这个:http://maccman.github.com/spine/ .它看起来像 Backbone.js 2.0,也有相似的名称:)。还没有测试它,这可能有点阻碍,因为图书馆非常最近。然而,从文档方面来看,它看起来很有前途。它消除了我发现的大部分问题,简化了 API,甚至消除了对 underscore.js 的依赖,这对于库来说是一件好事。我会在这里发布我的进一步发现。

最佳答案

好吧,我想我现在可以很自信地说:Backbone 已死,Spine 万岁。

Spine 不完全是 Backbone 的一个分支。然而,它非常相似,并且明显受到某些设计决策的启发。可以说作者尽量保留了原有的backbone API,去掉了不必要的和不合逻辑的东西。我发现它也更容易扩展。更改列表包括:

  • 摆脱可怕的Collection。而是使用“类方法”,
  • 充分利用 js 原型(prototype)性质(即不需要 get/set)。直接访问属性。需要显式调用 save() 才能触发事件。
  • ViewsControllers 现在合并为新型 Controllers,它们的目的是响应 DOM 事件并绑定(bind)到模型事件。
  • 名字:)

我发现这些设计决策连贯且明智。

关于javascript - Backbone.js 及其 API 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5798520/

相关文章:

javascript - Angularjs 更新按钮文本基于 $http 响应 ng-click

javascript - angularjs 作用域层次结构或者为什么我看不到 a 作用域变量?

java - 具有 MVC 模式的观察者/可观察对象

java - 覆盖 Java 中的抽象方法

javascript - 为全选/取消全选时的每个复选框调用 jQuery 函数

api - Magento 2 API : How do I list products as a customer or anonymous user

php - 让我的 JavaScript 文本编辑器提交

javascript - 将存储在字符串中的数组转换为数组

ios - 限制地点自动完成的结果 - GOOGLE API AUTO COMPLETE

api - 如何使用 Karate 工具和特征文件比较包含数组的 2 个 JSON 对象