2013-03-22 73 views
0

纵观一些骨干的例子,我看到一些简单的模型是这样的:定制骨干结构对象

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

}); 

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

    }, 

    initialize: { 

    } 
}); 

})(); 

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

+0

第一个具有一个简易的方法,第二个没有。不知道你是否在问别的东西。 – kinakuta 2013-03-22 04:59:28

回答

1

我会考虑更传统的第一种形式,特别是因为我甚至没有在主要的Backbone.js网站上看到第二种形式。

要了解他们是如何做同样的事情,首先注意Backbone.Model.extend()是也返回功能的功能:

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

所以变量Vehicle最终被设置为一个功能这是你看它的一种模型构造器方法。不过,我认为第二种形式更为间接且不必要的复杂:它将Vehicle设置为调用一个函数的结果,该函数本身只返回Backbone.Model.extend(),所以它只是一个更复杂的说同一事物的方式。

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(); 
    } 

}); 

})();