0

查看一些主干示例,我看到了一些像这样的简单模型:

var Vehicle = Backbone.Model.extend(
{
   summary: function () {
   return 'Vehicles move';
   }

});

或者

Vehicle = (function () {
return Backbone.Model.extend({
   defaults: {

   },

   initialize: {

   }
});

})();

编辑:(澄清)我想知道是否有人可以解释定义骨干对象的两种方法之间的区别以及更传统的方法。我知道它们内部没有相同的方法,但我更感兴趣的是第一个方法如何扩展主干模型,第二个方法将其包装在一个闭包中。我不确定我是否真的掌握了每种情况以及何时使用哪种模式。提前致谢!

4

2 回答 2

1

我会认为第一种形式更加传统,特别是因为我什至在主Backbone.js网站上都没有看到第二种形式。

要了解它们如何做同样的事情,首先要注意 Backbone.Model.extend() 是一个也返回一个函数的函数:

> Backbone.Model.extend()
  function () { return parent.apply(this, arguments); }

所以这个变量Vehicle最终被设置为一个模型构造方法的函数,无论你怎么看它。不过,我会认为第二种形式更间接且不必要地复杂:它设置Vehicle为调用一个函数的结果,该函数本身只是返回Backbone.Model.extend(),所以它只是一种更复杂的表达方式。

于 2013-03-22T05:19:18.990 回答
1

如果模型的所有属性都易于定义,则建议使用模式 1。但是,如果任何属性实现起来很复杂,因此需要一个“私有”辅助函数,您不想在模型或全局对象中公开它,最好利用闭包来隐藏它。那是模式2。

一个例子:

Vehicle = (function () {

function helper1() {} //don't want to expose it
function helper2() {}

return Backbone.Model.extend({
   defaults: {

   },

   initialize: {

   }

   summary: function() {
      helper1();
      helper1();
   }

});

})();
于 2013-03-22T08:55:13.837 回答