Javascript Backbone.js及其API混淆

Javascript Backbone.js及其API混淆,javascript,model-view-controller,api,rest,backbone.js,Javascript,Model View Controller,Api,Rest,Backbone.js,我最近开始使用Backbone.js。我喜欢它的架构,就功能而言,它几乎正是我所需要的 。。。然而,我发现了以下警告: 对于Collectionsget表示与Models不同的内容。没有集。应该以常规方式访问属性。我觉得很不一致。有时很容易混淆模型和集合。有什么办法可以克服这个问题吗 在Model.extend中指定初始值并不总是有效。例如,分配url不会覆盖默认行为。这只能通过调用set()方法来实现。还是很容易出错 我仍然不知道是否需要在initialize()调用中使用get/set 我

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

。。。然而,我发现了以下警告:

  • 对于
    Collection
    s
    get
    表示与
    Model
    s不同的内容。没有
    。应该以常规方式访问属性。我觉得很不一致。有时很容易混淆模型和集合。有什么办法可以克服这个问题吗
  • Model.extend中指定初始值并不总是有效。例如,分配
    url
    不会覆盖默认行为。这只能通过调用
    set()
    方法来实现。还是很容易出错
  • 我仍然不知道是否需要在
    initialize()
    调用中使用
    get
    /
    set
  • 我不明白为什么我不能在
    initialize()
    中调用
    .bindAll(this)
    ,我必须像这样列出要绑定的特定函数名:
    .bindAll(this,firstFunc,secondFunc,…)
    。这不是很干
我想知道:关于上述情况,最佳做法是什么?为了使框架更加一致,您做了哪些工作?是否有任何修补程序?我做错了什么/违反了公约吗

如果有任何真实世界的好例子,我将不胜感激。我确实发现了这一点:这些并没有解决任何提到的问题。事实上,他们只是提出了最简单的想法,绝对没有边界案例,所以任何更复杂的事情都可能有用

编辑:

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

  • 我是否曾经被允许像这样在扩展上放置其他属性:
    var SomeModel=Backbone.Model.extend({myattribute:myvalue})
    • 如果是这样,那么为什么对
      newsomemodel().get(“myattribute”)
      的后续调用不起作用呢
  • initialize()
    中的
    这个
    到底是什么?是模型类还是模型实例
编辑(2):


嗯,我发现了这个:。它看起来像Backbone.js 2.0,也有一个类似的名称:)。我还没有测试过它,这可能会有点阻碍展示,因为这个库是最近开发的。然而,从文档的角度来看,它看起来非常有希望。它消除了我发现的大多数问题,简化了API,甚至消除了对
underline.js
的依赖,这对于库来说是件好事。我将在这里发布我的进一步发现。

集合没有“集合”的原因是集合不是数组,它们是集合,可能是有序的。将元素放置在特定位置的唯一受支持的方法是将其添加到集合中,然后对集合进行排序。

好的,我想我现在可以非常自信地说:主干死了,脊椎长寿了

脊椎并不是脊椎的分叉。然而,它非常相似,显然受到了一些设计决策的启发。可以说,作者尽可能多地保留了原始主干API,去掉了一切不必要或不合逻辑的东西。我发现它也更容易扩展。变更列表包括以下内容:

  • 摆脱可怕的
    收藏
    s。而是使用“类方法”
  • 最大限度地利用js原型特性(即不需要
    get
    /
    set
    )。属性是直接访问的。要触发事件,需要显式调用
    save()
  • 视图
    控制器
    现在合并为新型的
    控制器
    ,其目的是响应DOM事件并绑定到模型事件
  • 姓名:)

我觉得这些设计决策连贯而明智。

我不是这个意思。对于
模型
get()
表示返回属性值。集合可以有,也确实有属性,比如说
.url
。但是,
get()
保留用于访问项目。我个人不会给两个完全不同的函数取相同的名字——这是我的观点。我理解这一点。但是你也说过“没有集合。”同样,对于
Model
s来说,
set()
意味着设置一个属性。但是对于集合,我应该直接设置属性。这更令人困惑,因为可能会错误地对模型执行同样的操作,从而无法触发相应的触发器。按照这种逻辑,您永远无法将任何方法命名为“set”,因为它会让您对如何在其他不相关的类上设置值感到太困惑。好问题,我也发现主干有点奇怪。你应该把你的发现作为你自己问题的答案。@brianpeiris一旦我确定它确实可用,我会尽快告诉你。到目前为止,一切顺利。脊椎似乎真的被仔细考虑过了。我也更倾向于脊椎。我一直在使用主干网,get('property')这件事不仅在代码中,而且在模板中都是一件痛苦的事情。那是我唯一有骨气的真正的牛肉。我希望斯皮恩能上一堂观景课。如果您查看元素设计模式,它正是带有集合的视图在主干中所处的位置。@mgutz这可能是一种设计模式,但我总是发现集合是多余的。尤其令人痛苦的是,它们实际上是必需的(默认情况下构建URL的方式)。你们也可以在书脊上收藏,这比不在主干上收藏要少写。@julkiewicz主干已经死了?你的答案已经有一年多了。。。还是准确吗?@KinjalDixit我也在想同样的问题。这似乎是一篇写得很好的文章,作者在现实世界的项目中实现了这两个方面。最后,他说:“作为一个结论,我建议什么时候最关键的事情是简单还是简单