Backbone.js幕后

时间:2012-07-11 18:04:07

标签: backbone.js

我通过示例应用阅读了几篇关于Backbone.js的文章,但是我找不到关于Backbone如何知道视图中的窗口小部件何时被点击以及绑定到哪个模型的解释或示例。

是否通过ID或其他内部分配来处理?

例如,如果要删除id =“123”的div,可以使用jQuery或javascript函数将其从DOM中删除。在骨干中,这个div可能没有id,但可以在不知情的情况下删除,对吗?

如果有人知道一篇好文章或者可以提高我对此的理解那就太棒了。

3 个答案:

答案 0 :(得分:1)

视图“知道”它所绑定的模型的方式是通过下面显示的_configure方法完成的:

_configure: function(options) {
  if (this.options) options = _.extend({}, this.options, options);
  for (var i = 0, l = viewOptions.length; i < l; i++) {
    var attr = viewOptions[i];
    if (options[attr]) this[attr] = options[attr];
  }
  this.options = options;
}

要注意的导入块是:

for (var i = 0, l = viewOptions.length; i < l; i++) {
    var attr = viewOptions[i];
    if (options[attr]) this[attr] = options[attr];
}

viewOptions是一个对视图具有“特殊”含义的键数组。这是阵列:

var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName'];

此循环是视图与模型或视图和集合之间的“粘合剂”。如果它们出现在选项中,则会自动分配。

所有这些都在annotated source code

答案 1 :(得分:0)

检查http://www.joezimjs.com/javascript/introduction-to-backbone-js-part-1-models-video-tutorial/

即使看起来很复杂,也很难学,相信我。

如果您更具体地询问我可以尝试提供帮助。

答案 2 :(得分:0)

阅读消息来源可能是您提高理解力度的最佳选择。您要查看的Backbone函数称为delegateEvents。但简短版本是它使用jQuery delegate()函数。根元素是View的元素(el属性),它由您提供的任何选择器进行过滤。

jQuery实际上并没有将处理程序绑定到您正在侦听的每个元素。相反,它让事件冒泡到根元素并在那里检查它们。由于每个元素都没有附加任何内容,因此您可以自由删除它们而不会造成任何问题。但是,删除View元素的一些方法(例如,通过在父元素上设置innerHTML)可能会导致内存泄漏。我对此并不是百分之百确定,但最好不要那样做。